消息系统Kafka笔试题:Kafka 底层的文件存储结构

分区目录文件, Partition 命名规则为:【topic 名称】+【从 0 开始的有序序号】
drwxr-x	% 2 root root 4096 Jul 26 19:35 kafka-topic-01-0
drwxr-x	% 2 root root 4096 Jul 24 20:15 kafka-topic-01-1
drwxr-x	% 2 root root 4096 Jul 24 20:15 kafka-topic-01-2 

# 分区目录中的日志数据文件和日志索引文件
-rw-r-----	1	root	root	512K	Jul	24	19:51	00000000000000000000.index
-rw-r-----	1	root	root	1.0G	Jul	24	19:51	00000000000000000000.log
-rw-r-----	1	root	root	768K	Jul	24	19:51	00000000000000000000.timeindex
-rw-r-----	1	root	root	512K	Jul	24	20:03	00000000000022372103.index
-rw-r-----	1	root	root	1.0G	Jul	24	20:03	00000000000022372103.log
-rw-r-----	1	root	root	768K	Jul	24	20:03	00000000000022372103.timeindex
-rw-r-----	1	root	root	512K	Jul	24	20:15	00000000000044744987.index
-rw-r-----	1	root	root	1.0G	Jul	24	20:15	00000000000044744987.log
-rw-r-----	1	root	root	767K	Jul	24	20:15	00000000000044744987.timeindex
-rw-r-----	1	root	root	10M	Jul	24	20:21	00000000000067117761.index
-rw-r-----	1	root	root	511M	Jul	24	20:21	00000000000067117761.log
-rw-r-----	1	root	root	10M	Jul	24	20:21	00000000000067117761.timeindex

在Kafka中,每个Log对象又可以划分为多个LogSegment文件,每个LogSegment文件包括一个日志数据文件和两个索引文件,文件命名规则为上一个Segment 文件最后一条消息的Offset 值。如下图所示

消息系统Kafka笔试题:Kafka 底层的文件存储结构_第1张图片


如何根据Offset来查找一条消息: 根据指定的偏移量,使用二分法查询定位出该偏移量对应的消息所在的分段索引文件和日志数据文件。然后通过二分查找法,继续查找出小于等于指定偏移量的最大偏移量,同时也得出了对应的Position(实际物理位置),根据该物理位置在分段的日志数据文件中顺序扫 描查找偏移量与指定偏移量相等的消息。下面是Kafka中分段的日志数据文件和偏移量索引文件的对应 映射关系图(其中也说明了如何按照起始偏移量来定位到日志数据文件中的具体消息)

消息系统Kafka笔试题:Kafka 底层的文件存储结构_第2张图片

你可能感兴趣的:(消息系统Kafka笔试题:Kafka 底层的文件存储结构)