Kafka概述
Kafka-文件存储机制
1. 分区:
-
Kafka中的每个主题(topic)都可以分成一个或多个分区。
-
Topic是逻辑上的概念,而Partition是物理上的概念。
-
分区是消息的基本单元,每个分区都是一个有序的log日志文件。
-
Producer
生产的数据会被不断追加到该log文件末端,消息按顺序追加到分区的末尾,这使得Kafka能够保证在单个分区内的消息是有序的。 -
分区的数量通常与集群中的消费者数量相匹配,这样可以更好地实现负载均衡和并行处理。
2. Segment文件和日志压缩:
-
为了减少磁盘使用和提高性能,Kafka支持日志的压缩。
-
当一个日志段达到一定的大小或时间阈值时,Kafka会将其进行压缩。压缩后的日志段被称为段文件(
Segment file
)。 -
压缩可以通过不同的算法进行,比如Gzip或Snappy。压缩后的段文件将占用更少的磁盘空间,并且在传输时能够更有效地利用网络带宽。
3. 日志段:
- 每个分区由一个或多个日志段组成。
- 日志段是Kafka的基本存储单元,它们是不可变的,一旦创建就不能被修改。
- 当一个日志段被填满后,Kafka会创建一个新的日志段来接收新的消息。
- 旧的日志段将被保留一段时间(根据配置),然后根据策略进行删除。这种分段的方式使得磁盘的使用更加高效,并且简化了日志的管理和维护。
4. 索引文件:
-
每个日志段都有一个对应的索引文件。
-
索引文件存储了消息偏移量(
offset
)和物理位置之间的映射关系,这样Kafka可以快速地定位到消息的位置。
-
索引文件通常以稀疏索引的形式存在,这意味着它只包含一些关键位置的索引条目,而不是每个消息都有一个索引条目。
- 这种设计在保证了快速查找的同时,也减少了索引文件的大小。
5. 日志清理和分段剔除:
Kafka中默认的日志保存时间为7天,可以通过调整如下参数修改保存时间。
那么日志一旦超过了设置的时间,怎么处理呢?
Kafka中提供的日志清理策略有delete和compact两种。
1)delete日志删除:将过期数据删除
- Kafka支持通过日志清理(Log Compaction)来保留最近的消息,并删除旧的消息。这样可以确保只保留最新的状态,而过时的消息可以被删除。
- Kafka支持分段剔除,即当一个日志段不再需要时,可以被删除或归档到其他存储介质中,以释放磁盘空间。
2)compact日志压缩