Log Segment:
-- 一个Segment包含两个组件(component): log文件 和 index文件;
-- log文件记录的是真实的kafka message;
-- index文件记录的是message逻辑偏移量offset和物理文件位置之间的映射。
-- 每个Segment有一个基本偏移量(baseOffset)
(1) Segment文件命名规则:
[base_offset].index 和 [base_offset].log (此处中括号仅用作描述)
示例:
[alex@Mars /home/alex/kafka/logs/sampleTopic-0]
$ls
00000000000000851449.log 00000000000000851449.index
00000000000000866999.log 00000000000000866999.index
00000000000000882625.log 00000000000000882625.index
00000000000000898169.log 00000000000000898169.index
00000000000000914106.log 00000000000000914106.index
(2)Segment添加消息规则:
1> 每个offset负责定位“一定大小”的Kafka消息集合
2> 这里所谓"一定大小", Kafka logSegment中用如下变量记录 : bytesSinceLastIndexEntry, 其字面含义很清晰的表明了它的作用: 记录自从上次
添加一条index之后,在log文件中累计加入的message集合大小(bytes)
3> 在试图append一条新消息(message)之前,先检查这个“一定大小”是否超过配置的规定值;
若超过,则创建一条新的index记录并append至[BaseOffset].index:
index记录的逻辑格式如下: offset---> 当前[BaseOffset].log文件大小(log.sizeInBytes)
同时 bytesSinceLastIndexEntry 清零;
4> Append新消息至[BaseOffset].log