Kafka日志管理Linux上的操作指南
Kafka的日志(包括消息日志、服务日志)默认存储在config/server.properties文件中log.dirs参数指定的目录(如/var/log/kafka)。修改该参数可自定义日志存储路径,需确保目录存在且有写入权限(如mkdir -p /var/log/kafka && chown -R kafka:kafka /var/log/kafka)。
Kafka通过**日志分段(Segment)**机制管理日志,支持两种核心清理策略:
log.cleanup.policy=delete(默认);log.retention.hours=168(保留7天,优先级低于log.retention.ms);log.retention.bytes=1073741824(保留1GB,-1表示无限制);log.segment.bytes=1073741824(每个分段最大1GB)。log.cleanup.policy=compact(可同时启用delete,compact)。生效方式:修改配置后,重启Kafka服务(systemctl restart kafka)。
logrotate是Linux系统自带的日志管理工具,可自动分割、压缩、清理Kafka日志,避免单个文件过大。
sudo apt-get install logrotate(Debian/Ubuntu)或sudo yum install logrotate(CentOS/RHEL)。/etc/logrotate.d/kafka文件,添加以下内容(以/var/log/kafka/*.log为例):/var/log/kafka/*.log {
daily # 每天轮转
missingok # 忽略缺失文件
rotate 7 # 保留7天
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(避免压缩当天日志)
notifempty # 空文件不轮转
create 644 kafka kafka # 创建新日志文件,权限644,属主kafka
sharedscripts # 所有日志处理完再执行脚本
postrotate
[ ! -f /var/run/kafka.pid ] || kill -USR1 `cat /var/run/kafka.pid` # 通知Kafka重新打开日志文件
endscript
}
logrotate -vf /etc/logrotate.d/kafka(-v显示详情,-f强制执行)。tail -f /var/log/kafka/server.log(跟踪最新日志)。<topic-name>-<partition>命名(如test-topic-0),使用kafka-dump-log.sh工具查看内容:./bin/kafka-dump-log.sh --files /var/log/kafka/test-topic-0/00000000000000000000.log
grep命令过滤关键字(如tail -f /var/log/kafka/server.log | grep -i "error")。df -h命令,检查/var/log/kafka所在分区的使用情况,避免磁盘满导致服务异常。kafka-console-consumer.sh将Topic数据导出到文件(如./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning > test-topic-backup.txt)。MirrorMaker工具同步数据到备份集群,实现实时增量备份。