数据保存时,如果是以集群形式,那么就有多个partition分布在不同机器上,每个partition又划分为多组segment,每个segment又包含.log,.index,.timeindex文件,用于存放每条message的offset,消息大小,消息体等信息。
那么问题来了,要查找一个offset为368801的消息,该如何查找?
以下给出原理图:
1.根据二分法,找出对应的segment为segment2;
2. 打开找到的segment中的.index文件(也就是368796.index文件,该文件起始偏移量为368796+1,我们要查找的offset为368801的message在该index内的偏移量为368796+5=368801,所以这里要查找的相对offset为5)这里要提到的是,该文件采用的是稀疏索引的方式存储着相对offset及对应message物理偏移量的关系,所以直接找相对offset为5的索引找不到,这里同样利用二分法查找相对offset小于或者等于指定的相对offset的索引条目中最大的那个相对offset,所以找到的是相对offset为4的这个索引
3. 根据找到的相对offset为4的索引确定message存储的物理偏移位置为256。打开数据文件,从位置为256的那个地方开始顺序扫描直到找到offset为368801的那条Message。
Kafka消息查找
最新推荐文章于 2024-06-20 11:40:20 发布