1.kafka的消息存储
存儲路径: /export/server/kafka/data
在此目录下,根据topic名称和分片编号创建一个目录,在此目录下存储对应分片的数据
1- Kafka中数据是存储在磁盘中, 通过分文件的方式来存储的, 一个log文件默认最大为1GB,当达到1GB后, 就会滚动形成一个新的log文件, 同时对应的index文件也会滚动形成一个新的文件
2- 每一个消息数据片段都是由两个文件组成的:
index文件: 对log文件中数据索引信息
log文件: 存储是真正消息数据3- 文件名表示什么?
当前这个文件存储的消息起始偏移量
思考: kafka为啥要分文件的方式来存储数据呢? 如果吧数据放置到同一个文件中, 不更好嘛?原因: kafka本质是消息队列的中间件产品, 当消息被消费者所消费后, 存储在kafka中数据其实也就没啥用了, 或者说随着时间的推移, 存储在kafka的消息数据, 其数据价值会越来越低的, 所以说kafka存储数据仅仅是一种临时存储
默认情况下, kafka会自动删除超过168小时(7天)的数据, 通过分文件的方式, kafka只需要查看文件最后修改时间, 如果超过7天, 自动将其删除即可
相关配置: server.properties
log.retention.hours=168 (小时)
log.segment.bytes=1073741824(1GB)
2.kafka的查询机制
查询数据的步骤:
1- 确定消息被存储在那个segment片段中
2- 先去对应segment片段中index文件, 从这个索引文件中, 查询对应消息偏移量, 在log文件的什么位置上进行存储着
3- 根据返回的log文件的具体的位置信息, 底层会基于磁盘顺序查询方式查询log文件, 找到对应位置上数据即可
扩展:
磁盘的读写方式主要有二种: 顺序读写 和 随机读写
顺序读写的效率是远远高于随机读写的效率