kafka消息检索原理

1、消息结构体构成

在这里插入图片描述

2、消息检索的原理

读取数据的过程中,数据是属于某一个topic的某一个partition对应的某一个segment文件中的某一条记录。如何高效找到这条消息,决定着kafka的性能。
在这里插入图片描述
Kafka中数据文件的保存目录,我们可以看到的是这个partition下面有好多组文件,每一组都由一个segment数据文件,一个index索引文件,以及一个timeindex时间戳索引文件构成。
Segment就是保存数据的文件,index索引文件每一条消息相对偏移量,也就是一条msg在segment文件中的偏移量,而我们说的每一条消息的偏移量是指这一条消息在这一个分区中若干segment中的唯一的标识。
在这里插入图片描述
index文件的序号就是message在日志文件中的相对偏移量
OffsetIndex是稀疏索引,也就是说不会存储所有的消息的相对offset和position
消息检索的过程,以这个partition目录下面,00000000001560140916为例:
定位offset为1560140921的message

①定位到具体的segment日志文件
由于log日志文件的文件名是这个文件中第一条消息的offset-1。
因此可以根据offset定位到这个消息所在日志文件:00000000001560140916.log
②计算查找的offset在日志文件的相对偏移量
segment文件中第一条消息的offset = 1560140917
计算message相对偏移量:
需要定位的offset - segment文件中第一条消息的offset + 1 = 1560140921 - 1560140917 + 1 = 5
查找index索引文件, 可以定位到该消息在日志文件中的偏移字节为456。
综上,
直接读取文件夹00000000001560140916.log中偏移456字节的数据即可。
1560140922 -1560140917 +1 = 6 如果查找的offset在日志文件的相对偏移量在index索引文件不存在,
可根据其在index索引文件最接近的上限偏移量,往下顺序查找。

猜你喜欢

转载自blog.csdn.net/Erica_1230/article/details/113796456
今日推荐