Kafka源码分析及图解原理之Broker端(3)
每一个LogSegment都包含一些文件名一致的文件集合。文件名的固定是20位数字,如果文件名是00000000000000000000代表当前LogSegment的第一条消息的offset(偏移量)为0,如果文件名是00000000000000000097代表当前LogSegment的第一条消息的offset(偏移量)为97。日志文件有多种后缀的文件,重点关注.index、.timestamp、.log三种类型文件即可。
4.2 索引与日志文件 kafka有2种索引文件,第一种是offset(偏移量)索引文件,也就是.index结尾的文件。第二种是时间戳索引文件,也就是.timeindex结尾的文件。 我们可以用kafka-run-class.sh来查看offset(偏移量)索引文件的内容: 可以看到每一行都是offset:xxx position:xxxx。 这两者没有直接关系。
那么第一行的offset:12 position:4423是什么意思呢?它代表偏移量从0-12的消息的物理地址在0-4423。 同理第二行的offset:24 position:8773的意思也能猜得出来:它代表偏移量从13-24的消息的物理地址在4424-8773。 我们可以再用kafka-run-class.sh来看下.log文件的文件内容,关注里面的baseOffset和postion的值。你看看和上面说的对应的上吗。 4.3 如何用offset查找 按上面的例子,如何查询偏移量为60的消息 根据offset首先找到对应的LogSegment,这里找到00000000000000000000.index 通过二分法找到不大于offset的最大索引项,这里找到offset:24 position:8773 打开00000000000000000000.log文件,从position为8773的那个地方开始顺序扫描直到找到offset=60的消息 【编辑推荐】
点赞 0 (编辑:ASP站长网) |