1. Kafka文件存储机制
1.1 Topic 数据的存储机制
Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment包括:“.index”文件、“.log”文件和.timeindex等文件。这些文件位于一个文件夹下,该
文件夹的命名规则为:topic名称+分区序号,例如:first-0。
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)路径上的文件。查看内容,发现乱码
使用命令工具查看
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
2.3 Log文件和Index文件详解
注意:
- index为稀疏索引,大约每往log文件写入4kb数据,会往index文件写入一条索引。参数log.index.interval.bytes默认4kb。
- Index文件中保存的offset为相对offset,这样能确保offset的值所占空间不会过大,因此能将offset的值控制在固定大小