日志文件
消息存储
日志文件格式
一个

在

- 每个
partion (目录)相当于一个巨型文件被平均分配到多个大小相等segment (段)数据文件中。但每个段segment file 消息数量不一定相等,这种特性方便old segment file 快速被删除。 - 每个
partiton 只需要支持顺序读写就行了,segment 文件生命周期由服务端配置参数决定。
这样做的好处就是能快速删除无用文件,有效提高磁盘利用率。
segment file 组成:由2 大部分组成,分别为index file 和data file ,此2 个文件一一对应,成对出现,后缀".index" 和“.log”分别表示为segment 索引文件、数据文件. segment 文件命名规则:partion 全局的第一个segment 从0 开始,后续每个segment 文件名为上一个segment 文件最后一条消息的offset 值。数值最大为64 位long 大小,20 位数字字符长度,没有数字用0 填充。

Segment 索引与Offset 查找
由于

上图中索引文件存储大量元数据,数据文件存储大量消息,索引文件中元数据指向对应数据文件中
查找某个
-
第一步查找
segment file ,其中00000000000000000000.index 表示最开始的文件,起始偏移量(offset) 为0 。第二个文件00000000000000368769.index 的消息量起始偏移量为368770 = 368769 + 1. 同样,第三个文件00000000000000737337.index 的起始偏移量为737338=737337 + 1 ,其他后续文件依次类推,以起始偏移量命名并排序这些文件,只要根据offset 二分查找文件列表,就可以快速定位到具体文件。当offset=368776 时定位到00000000000000368769.index|log -
第二步通过
segment file 查找message 通过第一步定位到segment file ,当offset=368776 时,依次定位到00000000000000368769.index 的元数据物理位置和00000000000000368769.log 的物理偏移地址,然后再通过00000000000000368769.log 顺序查找直到offset=368776 为止。
上面讲的是如果要找某个
Message 物理结构
了解到

参数说明如下:
关键字 | 解释说明 |
---|---|
8 byte offset | 在 |
4 byte message size | |
4 byte CRC32 | 用 |
1 byte “magic" | 表示本次发布 |
1 byte “attributes" | 表示为独立版本、或标识压缩类型、或编码类型。 |
4 byte key length | 表示 |
K byte key | 可选 |
value bytes payload | 表示实际消息数据。 |