Ubuntu Kafka日志管理配置指南
一 核心概念与目录
- 区分两类日志:
- 业务日志(消息存储):Kafka将主题消息写入磁盘的日志段(LogSegment),由 server.properties 中的 log.dirs 指定目录(常见如:/var/log/kafka 或 /tmp/kafka-logs)。
- 服务日志(运行日志):Kafka服务进程输出到 logs/server.log 等文件,由 config/log4j.properties 控制日志级别与输出路径。
- 建议将业务日志与系统日志分盘存放,便于容量规划与权限隔离。
二 配置server.properties的消息日志保留与滚动
- 关键参数与作用(示例值可按需调整):
- log.dirs:日志存储目录,例如 /var/log/kafka。
- log.retention.hours / log.retention.minutes / log.retention.ms:按时间保留,常用 168 小时(7 天)。
- log.retention.bytes:按分区保留的最大字节数,例如 1073741824(1GB)。
- log.segment.bytes:单个日志段上限,例如 1048576(1MB,演示用),生产常用 1GB。
- log.roll.hours / log.roll.ms:按时间触发新日志段,例如 1 小时。
- log.cleanup.policy:保留策略,delete(删除旧段)或 compact(键压缩);也可 delete,compact 组合。
- log.cleaner.enable:是否启用日志清理器,建议 true。
- compression.type:消息压缩算法,常用 snappy / lz4 / zstd(或 producer 继承生产者)。
- 示例片段(仅展示关键项):
- log.dirs=/var/log/kafka
- log.retention.hours=168
- log.retention.bytes=1073741824
- log.segment.bytes=1073741824
- log.roll.hours=1
- log.cleanup.policy=delete
- log.cleaner.enable=true
- compression.type=snappy
- 提示:时间粒度更细时可用 log.retention.ms;若需键压缩主题,将 log.cleanup.policy=compact。
三 配置log4j.properties与服务日志轮转
- 调整服务日志级别与输出(示例):
- 在 config/log4j.properties 中将 log4j.rootLogger 设为 INFO, CONSOLE(或按需要改为 DEBUG),减少不必要的输出。
- 使用 logrotate 对 server.log 做按日轮转、压缩与保留:
- 新建配置 /etc/logrotate.d/kafka:
- /var/log/kafka/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0644 kafka kafka
sharedscripts
postrotate
[ ! -f /var/run/kafka.pid ] || kill -USR1
cat /var/run/kafka.pid
endscript
}
- 说明:
- 保留最近 7 天 日志并压缩。
- 通过向 Kafka 进程发送 USR1 触发日志重新打开(需确保 Kafka 以服务方式运行并写入 /var/run/kafka.pid)。
- 若未使用 PID 文件,可改为在 systemd 服务中 ExecReload= 发送 USR1,或改用 copytruncate(可能丢失少量日志)。
四 监控与维护
- JMX 与可视化:
- 启用 JMX(如设置 JMX_PORT=9999),使用 JConsole/VisualVM 查看堆、GC、请求耗时等;或部署 JMX Exporter 暴露指标,配合 Prometheus/Grafana 展示。
- 容量与告警:
- 定期执行 df -h 与 du -sh /var/log/kafka 检查磁盘;对日志目录设置磁盘告警,避免因磁盘满导致 broker 异常。
- 日志聚合与分析:
- 使用 ELK(Elasticsearch/Logstash/Kibana) 或 Splunk 收集与分析服务日志,便于故障排查与审计。
五 快速验证与常见问题
- 验证配置生效:
- 重启 Kafka 后,确认 server.log 按天轮转且压缩;在 /var/log/kafka 下能看到 server.log-YYYYMMDD.gz 等文件。
- 查看业务日志保留:用 kafka-log-dirs.sh --describe --bootstrap-server localhost:9092 --topic 检查分区段保留时间与大小是否符合 log.retention. / log.segment.bytes* 配置。
- 常见问题与处理:
- 权限不足:确保 /var/log/kafka 属主为运行 Kafka 的用户(如 kafka:kafka),logrotate 中 create 项与之匹配。
- 磁盘满:临时清理旧日志或扩容;检查 log.retention.bytes / log.retention.hours 是否过小导致频繁删除与重建。
- 时间粒度:需要更细粒度保留时优先使用 log.retention.ms;log.roll.ms 优先级高于 log.roll.hours。
- 压缩选择:在 CPU 与压缩率间权衡,常用 snappy / lz4 / zstd。