赞
踩
Kafka 的消息存储在磁盘中,为了控制磁盘占用空间,Kafka 需要不断地对过去的一些消息进行清理工作。Kafka 的每个分区都有很多的日志文件,这样也是为了方便进行日志的清理。在 Kafka 中,提供两种日志清理方式:
在Kafka的broker或topic配置中:
配置项 | 配置值 | 说明 |
---|---|---|
log.cleaner.enable | true(默认) | 开启自动清理日志功能 |
log.cleanup.policy | delete(默认) | 删除日志 |
log.cleanup.policy | compaction | 压缩日志 |
log.cleanup.policy | delete,compact | 同时支持删除、压缩 |
日志删除是以段(segment日志)为单位来进行定期清理的。
Kafka 日志管理器中会有一个专门的日志删除任务来定期检测和删除不符合保留条件的日志分段文件,这个周期可以通过 broker 端参数log.retention.check.interval.ms
来配置,默认值为 300,000,即 5 分钟。当前日志分段的保留策略有 3 种:
以下三种配置可以指定如果Kafka中的消息超过指定的阈值,就会将日志进行自动清理:
其中,优先级为log.retention.ms > log.retention.minutes > log.retention.hours
。默认情况,在broker中,配置如下:log.retention.hours=168
,也就是,默认日志的保留时间为 168 小时,相当于保留 7 天。
删除日志分段时:
file.delete.delay.ms
参数来设置,默认值为 60000,即 1 分钟。日志删除任务会检查当前日志的大小是否超过设定的阈值来寻找可删除的日志分段的文件集合。可以通过 broker 端参数log.retention.bytes
来配置,默认值为 -1,表示无穷大。如果超过该大小,会自动将超出部分删除。
注意:log.retention.bytes
配置的是日志文件的总大小,而不是单个的日志分段的大小,一个日志文件包含多个日志分段。
每个 segment 日志都有它的起始偏移量,如果起始偏移量小于 logStartOffset,那么这些日志文件将会标记为删除。
Log Compaction 是默认的日志删除之外的清理过时数据的方式。它会将相同的 key 对应的数据只保留一个版本。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。