文章目录
- 消息日志存储
消息日志存储
server.properties中配置了存储log的目录
log.dirs=/opt/server/kafka/kafka_2.12-3.0.0/kafka-logs-1
以first主题为例,该主题有4个分区,3个副本
[root@node2 kafka-logs-1]# ../bin/kafka-topics.sh --bootstrap-server node1:9092 --topic first --describe
Topic: first TopicId: IcU6kbglSSWOkruuSmgryg PartitionCount: 4 ReplicationFactor: 3 Configs: segment.bytes=1073741824Topic: first Partition: 0 Leader: 2 Replicas: 2,0,1 Isr: 2,1,0Topic: first Partition: 1 Leader: 0 Replicas: 0,1,2 Isr: 2,1,0Topic: first Partition: 2 Leader: 1 Replicas: 1,2,0 Isr: 2,1,0Topic: first Partition: 3 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
那么first的数据再kafka-logs-1中显示为:
drwxr-xr-x. 2 root root 204 1月 30 11:05 first-0
drwxr-xr-x. 2 root root 204 1月 30 11:34 first-1
drwxr-xr-x. 2 root root 204 1月 30 11:43 first-2
drwxr-xr-x. 2 root root 167 1月 30 11:05 first-3
每个分区中都有.log .index .timeindex文件
[root@node2 kafka-logs-1]# cd first-0
[root@node2 first-0]# ll
总用量 20
-rw-r–r–. 1 root root 10485760 1月 30 11:34 00000000000000000000.index
-rw-r–r–. 1 root root 71 1月 30 11:03 00000000000000000000.log
-rw-r–r–. 1 root root 10485756 1月 30 11:34 00000000000000000000.timeindex
-rw-r–r–. 1 root root 10 1月 30 11:04 00000000000000000000.snapshot
-rw-r–r–. 1 root root 10 1月 30 11:05 leader-epoch-checkpoint
-rw-r–r–. 1 root root 43 1月 16 18:24 partition.metadata
日志分段存储
Kafka 一个分区的消息数据对应存储在一个文件夹下,以topic名称+分区号命名,消息在分区内是分段(segment)存储,每个段的消息都存储在不一样的log文件里,这种特性方便old segment file快速被删除,kafka规定了一个段位的 log 文件最大为 1G
,做这个限制目的是为了方便把 log 文件加载到内存去操作:
00000000000000000000.index
部分消息的offset索引文件,kafka每次往分区发4K(可配置)消息就会记录一条当前消息的offset到index文件(稀疏索引),如果要定位消息的offset会先在这个文件里快速定位,再去log文件里找具体消息。
00000000000000000000.timeindex
消息的发送时间索引文件,kafka每次往分区发4K(可配置)消息就会记录一条当前消息的发送时间戳与对应的offset到timeindex文件(稀疏索引),如果需要按照时间来定位消息的offset,会先在这个文件里查找。
消息存储文件,主要存offset和消息体
00000000000000000000.log