日志清除策略
基于时间的删除策略
在server.properity
文件中设置如下:
log.retention.hours=168 //7d
log.retention.check.interval.ms=300000 //5min
log.segment.bytes=1073741824 //1G
log.cleaner.delete.retention.ms=86400000 // 1d
log.cleaner.backoff.ms=15000 //15s
每个segment
的大小为1GB
,每5分钟
检查一次是否有segment
已经查过了7d
,如果有将其标记为deleted
。标记为deleted
的segment
默认会保留1天
,清理线程会每隔15秒
检查一次,是否有标记为deleted的segment
的保留时间超过一天了,如果有将其从文件系统删除。
大家注意,kafka
清理时是不管该segment
中的消息是否被消费过,它清理的依据为是否超过了指定的保留时间,仅此而已。
基于大小的删除策略
log.retention.bytes参数默认没有指定。
混合策略
同时指定 log.retention.bytes
和log.retention.hours=168
,那么哪个先达到就以哪个为准.
日志压缩策略
Kafka
还提供了日志压缩(Log Compaction)
功能,通过这个功能可以有效的减少日志文件的大小,缓解磁盘紧张的情况,在很多实际场景中,消息的 key 和 value 的值之间的对应关系是不断变化的,就像数据库中的数据会不断被修改一样,消费者只关心 key
对应的最新的 value
。因此,我们可以开启 kafka
的日志压缩功能,服务端会在后台启动启动Cleaner 线程池
,定期将相同的 key 进行合并,只保留最新的 value 值。
注意
Kafka
日志到达清除时间后,并不会真正清除,只是标记为deleted
, 真正删除还有一个延时,这个时间通过log.cleaner.delete.retention.ms
参数进行设置