[Kafka]原理篇-消息查找

mac2025-05-29  1

前面提到,数据保存时,如果是以集群形式,那么就有多个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。

最新回复(0)