1.offset:一种逻辑概念,类似C语言数组的索引号,每个offset记录了消息在具体分区的位置,offset对应物理上的地址,如offset=1对应的物理地址是2809,即相应分区的第2809个字节;
2.offset不是全局递增,只是在单个分区内单调递增;
3.message结构:offset+字节大小+具体消息
4..log和.index文件,.log文件记录了message,.index文件是.log文件的索引文件,它们在kafka配置项server.properties/log.dirs定义:

5.log和.index文件命名:形如00000000000000000000.index,00000000000000000000.log,index和log文件前缀的offset。
6.logSegment:创建几个分区,就会有几个目录,如创建test1,3分区的topic,那么kafka-logs目录下就会有三个子目录,如下所示:

分区由若干个logSegment组成,如00000000000000000000.index,00000000000000000000.log,00000000000000002307.index,00000000000000002307.log等。
7.根据offset查找具体message
(1)根据offset使用二分查找定位具体的索引文件(索引文件前缀有offset);
(2)在具体的索引文件使用二分查找,用offset找到相应的物理地址;
(3)到索引对应的log文件使用顺序扫描找到具体消息。

在index文件中,左边第一列是offset,右边对应是物理地址,都是递增排序,log文件每条消息物理地址也是递增。

本文解析了Kafka中的offset概念,它如何指示消息在分区中的位置,以及log和index文件的作用与结构。重点介绍了如何通过offset查找和定位具体消息的过程,包括二分查找在索引和log文件中的应用。
5078

被折叠的 条评论
为什么被折叠?



