一、说明

Kafka将消息存储在磁盘中,为了控制磁盘占用空间的不断增加就需要对消息做一定的清理操作。Kafka中每一个分区partition都对应一个日志文件,而日志文件又可以分为多个日志分段文件,这样也便于日志的清理操作。Kafka提供了两种日志清理策略:
日志删除(Log Deletion):按照一定的保留策略来直接删除不符合条件的日志分段。
log.cleanup.policy=delete

日志压缩(Log Compaction):针对每个消息的key进行整合,对于有相同key的的不同value值,只保留最后一个版本。
log.cleanup.policy=compact

二、日志删除策略

1、相关配置

启用删除策略
log.cleanup.policy=delete
#专门的日志删除任务来周期性检测和删除不符合保留条件的日志分段文件,默认300000ms,5分钟
log.retention.check.interval.ms=300000
#可配置以下两个策略:
#1、清理超过指定时间清理: 
log.retention.hours=16
#2、超过指定大小后,删除旧的消息;默认值为-1,表示无穷大;
log.retention.bytes=1073741824

#注意:
#log.retention.bytes和log.retention.hours任意一个达到要求,都会执行删除,会被topic创建时的指定参数覆盖

2、删除思想

Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用;

三、日志压缩策略

1、相关配置

#1、是否开启日志压缩
log.cleaner.enable=true
#2、启用日志压缩策略
log.cleanup.policy=compact

2、压缩策略的细节

(1)压缩后的offset可能是不连续的,比如上图中没有5和7,因为这些offset的消息被merge了,当从这些offset消费消息时,将会拿到比这个offset大的offset对应的消息,比如,当试图获取offset为5的消息时,实际上会拿到offset为6的消息,并从这个位置开始消费。

(2)压缩策略支持删除,当某个Key的最新版本的消息没有内容时,这个Key将被删除,这也符合以上逻辑。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐