Kafka源代码解析 --- Log Segment

本文深入探讨了Kafka Segment的组成、命名规则以及添加消息的规则,详细解释了log文件和index文件的作用,以及如何通过基本偏移量进行消息定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值