CentOS 上 Kafka 日志清理与防误删指南
一 先分清两类日志
- Kafka 消息日志(Topic 数据):存放在 server.properties 的 log.dirs 指定目录(常见如 /tmp/kafka-logs 或 /var/log/kafka),由 Kafka 自身的保留与清理策略管理,不等同于操作系统日志。
- Kafka 服务/操作日志:由 log4j 输出(如 server.log、kafka-request.log 等),通常位于安装目录的 logs/ 子目录,需通过 logrotate 或脚本轮转与清理。
二 清理 Kafka 消息日志(Topic 数据)
- 在 server.properties 中设置保留策略(按时间或按大小,二选一或组合):
- 按时间保留:例如保留最近 7 天
- 按大小保留:例如每个分区最多 1GB
- log.retention.bytes=1073741824
- 段滚动参数(影响清理粒度与速度)
- log.segment.bytes=1073741824(1GB)
- 清理策略(主题级别,常见为 delete;compact 用于键保留语义)
- log.cleanup.policy=delete
- 动态生效方式:修改配置后,可通过 kafka-topics.sh --alter --topic --config retention.ms=… 对指定主题即时生效;或滚动重启 Broker 使全局配置生效。
- 注意:不要手动删除 log.dirs 下的活跃分段文件,避免引发 IOException 或数据不一致;让 Kafka 按策略自行清理。
三 清理 Kafka 服务与操作日志(server.log 等)
四 防止系统清理误删 Kafka 数据目录
- 若 log.dirs 位于 /tmp(不推荐),CentOS 7 的 systemd-tmpfiles 默认会清理 /tmp 下长时间未访问的目录,可能删除 /tmp/kafka-logs 导致 Broker 报错:
- 修改:/usr/lib/tmpfiles.d/tmp.conf
- 忽略清理:添加行 x /tmp/kafka-logs(忽略该目录)
- 或忽略匹配:添加 x /tmp/kafka-*
- 使配置生效:执行 systemd-tmpfiles --create,必要时重启。
- 更优做法:将 log.dirs 改为持久目录(如 /var/log/kafka 或 /opt/kafka/kafka-logs),并修正目录权限与属主,从根本上规避 /tmp 清理风险。
五 日常巡检与最佳实践
- 定期检查磁盘与增长趋势:df -h、du -sh /var/log/kafka /opt/kafka/logs;为关键目录设置告警阈值。
- 监控与容量规划:通过 JMX 或监控平台观察 LogRetentionRate、LogEndOffset、UnderReplicatedPartitions 等指标,提前扩容或调整保留策略。
- 目录与权限:确保 log.dirs 与服务日志目录归属运行用户(如 kafka:kafka),权限 0755/0644 合理设置,避免因权限导致清理或写入失败。