Kafka21:Kafka文件存储

Kafka21:Kafka文件存储

1. Kafka文件存储机制

1.1 Topic 数据的存储机制

Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取了分片索引机制,将每个partition分为多个segment。每个segment包括:“.index”文件、“.log”文件和.timeindex等文件。这些文件位于一个文件夹下,该 文件夹的命名规则为:topic名称+分区序号,例如:first-0。
notion image
 

2. Topic 数据到底存储位置

2.1 启动生产者,并发送消息

  • 我这里已经发送过数据,直接查看
root@redis01:/usr/local/kafka# bin/kafka-console-producer.sh --bootstrap-server redis01:9092 --topic first

2.2 查看数据

查看redis01(或者redis02、redis03)的/usr/local/kafka/datas/first-1 (first-0、first-2)路径上的文件。
notion image
notion image
查看内容,发现乱码
notion image
使用命令工具查看
root@redis01:/usr/local/kafka# bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files ./datas/first-0/00000000000000000000.index root@redis01:/usr/local/kafka# bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files ./datas/first-0/00000000000000000000.log
notion image

2.3 Log文件和Index文件详解

notion image
 
注意:
  1. index为稀疏索引,大约每往log文件写入4kb数据,会往index文件写入一条索引。参数log.index.interval.bytes默认4kb。
  1. Index文件中保存的offset为相对offset,这样能确保offset的值所占空间不会过大,因此能将offset的值控制在固定大小