日志清理
kafka message 存在磁盘中,为了控制磁盘占用空间的增加就需要对落盘的 message 做一定的清理操作。每个 Partition 对应的 Log 都有多个 LogSegment ,也是方便日志清理。目前有 delete 和 compact 两种策略:
- Log Retention:按照一定的保留策略直接删除不符合条件的 LogSegment;
- Log Compaction:针对每天消息的 Key 进行整合,具有相同 Key的不同 Value 值,只保留最后版本
日志清理策略通过 broker 端参数 log.cleanup.policy
来设置,默认值是 delete
。对应 compact
策略,还需要将 log.cleaner.enable
设为 true,默认为 true。同时,log.cleanup.policy
还可以设置为 delete,compact
来同时支持两种策略。
注意,日志清理策略也可以控制到主题级别,对应的参数是 cleanup.policy
。
日志删除
LogManager 中会有一个专门的日志删除任务来周期性的检测和删除不符合保留条件的 LogSegment 。周期通过 log.retention.check.interval.ms
来进行控制,默认 30000 ,即 5 分钟。当前的日志保留策略也有三种:基于时间的、基于Log大小的、基于日志起始 offset 的。