Kafka日志清理怎样设置
小樊
37
2025-12-11 03:58:08
Kafka日志清理设置指南
一 核心概念与适用场景
- Kafka的清理以日志段 segment为单位执行,当前正在写入的active segment不会被清理。
- 支持两类策略:
- delete:按时间或大小删除旧数据,适合事件流、日志类场景。
- compact:按键保留同一key的最新值,适合状态/维表类场景(要求消息key不为空)。
- 清理行为可分别在broker级与topic级配置,topic级会覆盖broker级默认策略。
二 关键参数与默认值
- 清理策略
- log.cleanup.policy(topic级):delete | compact | delete,compact;broker级可用log.cleaner.enable=true开启清理线程与压缩能力。
- 时间保留
- log.retention.ms > log.retention.minutes > log.retention.hours;默认log.retention.hours=168(7天)。
- 大小保留
- log.retention.bytes:分区级日志总大小阈值,默认**-1**(不限制)。
- 检查与段
- log.retention.check.interval.ms:检查周期,默认300000 ms(5分钟)。
- log.segment.bytes:单个日志段大小,默认1073741824 B(1GB)。
- 删除动作
- file.delete.delay.ms:被标记删除的段文件延迟删除时间,默认60000 ms(1分钟)。
三 配置步骤与示例
- 1)Broker级默认设置(server.properties)
- 建议显式开启清理与压缩能力,并设置合理检查周期与段大小:
- log.cleaner.enable=true
- log.cleanup.policy=delete
- log.retention.ms=604800000(7天,单位ms)
- log.retention.bytes=-1(不按总大小限制)
- log.retention.check.interval.ms=300000
- log.segment.bytes=1073741824
- 2)Topic级覆盖示例
- 事件流(保留最近3天):
- kafka-configs.sh --bootstrap-server broker:9092 --alter --topic --add-config retention.ms=259200000
- 状态/维表(启用压缩):
- kafka-configs.sh --bootstrap-server broker:9092 --alter --topic --add-config cleanup.policy=compact
- 3)快速验证
- 查看磁盘与段:kafka-log-dirs.sh --describe --bootstrap-server broker:9092 --broker-list
- 观察是否按预期产生/清理“.deleted”段文件(file.delete.delay.ms控制最终删除)。
四 大小删除与段大小的配合要点
- 大小清理按“分区总大小”计算,且以段为单位删除最老的段;只有当“超出阈值的部分 ≥ 一个日志段大小”时才会触发删除。
- 例:段大小500MB,分区现有段合计1500MB+10MB(10MB为active段)。阈值设为1500MB时不会删除;阈值设为1000MB时,超出部分为500MB+10MB,将删除最老的500MB段。
五 常见问题与最佳实践
- 压缩策略需保证消息key不为空;压缩后offset不再连续,但可查询,适合“取最新状态”的业务。
- 时间判定基于每个段的最大时间戳与当前时间比较;段切分后最大时间戳固定,便于过期判断。
- 清理只作用于非active段;active段只有在滚动(segment切换)后才可能进入清理候选。
- 建议结合监控(如磁盘使用、段数量)与告警,定期评估retention.ms / retention.bytes / segment.bytes的组合,避免频繁段滚动或清理滞后。