Kafka数据的存储机制
数据存放的位置
- 取决于
${KAFKA_HOME}/config/server.properties
这个配置文件中的log.dirs 配置项
数据的存放形式
- 在数据的存储目录下,根据topic名和分片编号创建一个目录并存储对应分片数据
- 以分文件的形式存储数据片段,每个数据片段称为segment,是由2个文件组成的
- log文件:存储消息数据
- index文件:存储log文件数据索引数据
- 每个log文件默认最大为1G,达到阈值后会滚动形成一个新log文件及index文件,1G大约存储70万条数据
- log和index的文件名是消息的起始偏移量
分文件存储的原因
- 如果所有数据存储在一个文件中,删除过期数据时,需要重新遍历文件,麻烦且费时
- 切分文件后,删除过期数据,直接根据文件的日期属性判断即可
- 默认保留168小时(7天)内修改过的数据文件
Kafka的查询机制
数据集如下
- 确定消息被存在哪个segment片段中
- 去对应的segment中找到index文件,从里面查询消息的偏移量,确定数据在log文件中的位置
- 根据返回的消息在log文件中的具体位置,基于磁盘顺序查询的方式查询log文件,找到加粗样式对应位置上的数据