Kafka Linux日志管理指南
Kafka的日志默认存储在/tmp/kafka-logs目录(易被系统清理),需通过修改server.properties文件指定更稳定的路径(如/var/log/kafka),避免因系统重启或临时目录清理导致数据丢失。
log.dirs=/var/log/kafka # 多个目录用逗号分隔(如/var/log/kafka1,/var/log/kafka2),可分散磁盘I/O负载
通过以下参数控制日志的保留时间和大小,防止日志无限增长占用磁盘空间:
log.retention.hours=168(保留7天,168小时);log.retention.ms=0(若设置为0则禁用基于时间的清理)。log.retention.bytes=1073741824(每个分区最大1GB,超过则删除旧数据);log.segment.bytes=1073741824(每个日志段最大1GB,达到后创建新段)。log.retention.check.interval.ms=300000(每5分钟检查一次日志是否符合清理条件)。Kafka支持两种核心清理方式,需根据业务需求选择:
log.cleanup.policy=delete,直接删除超过保留时间或大小的日志段,适用于普通消息场景。log.cleanup.policy=compact(需开启log.cleaner.enable=true),保留每个键的最新值,适用于需要保留最新状态的场景(如用户配置变更)。log.cleaner.min.compaction.lag.ms=0(最小压缩延迟,0表示立即压缩);log.cleaner.max.compaction.lag.ms=10000(最大压缩延迟,10秒内未压缩的日志段强制处理)。通过log.roll系列参数控制日志滚动(创建新段)的时机:
log.roll.hours=1(每小时强制创建新日志段,即使未达到log.segment.bytes大小)。log.segment.bytes=1073741824(日志段达到1GB时创建新段)。log.roll.msg.count=1000000(可选,达到100万条消息时创建新段)。虽然Kafka自身支持日志清理,但结合Linux的logrotate工具可实现更灵活的轮转、压缩和归档:
yum install logrotate(CentOS)或apt install logrotate(Ubuntu)安装。/etc/logrotate.d/kafka中添加以下内容,实现每日轮转、保留7天、压缩旧日志:/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
}
说明:postrotate脚本通过向Kafka进程发送USR1信号触发日志滚动,确保新日志写入新文件。启用日志压缩可显著减少存储空间占用,需根据业务需求选择压缩算法:
log.cleaner.enable=true(默认false)。compression.type=snappy(平衡性能与压缩比,推荐);gzip(高压缩比,但CPU消耗大);lz4(高性能,适合高吞吐场景);zstd(最新算法,压缩比高且速度快)。compression.type=lz4。df -h /var/log/kafka定期检查日志目录磁盘使用情况,设置阈值(如80%)触发告警。log4j.properties文件调整Kafka日志级别,减少不必要的日志输出(如将生产者日志设为WARN):log4j.logger.org.apache.kafka.producer=WARN
kafka-console-consumer工具将数据导出到本地或远程存储(如HDFS):kafka-console-consumer --bootstrap-server localhost:9092 --topic my_topic --from-beginning > my_topic_backup.json
MirrorMaker工具将数据同步到备份集群,实现实时增量备份。server.properties后需重启Kafka服务(systemctl restart kafka)使配置生效。