CentOS环境下Kafka日志管理指南
Kafka通过server.properties文件中的logs.dirs参数指定日志存储路径(如/var/kafka/logs),支持配置多个目录(逗号分隔),有助于分散磁盘I/O负载。修改后需重启Kafka服务使配置生效。
Kafka提供两种核心日志清理策略,需根据业务需求选择:
适用于需要定期清理旧数据的场景,通过以下参数控制:
log.retention.hours=168(保留7天,单位:小时);log.retention.bytes=1073741824(每个分区最大1GB,单位:字节);log.segment.bytes=1073741824(每个日志段最大1GB,达到后创建新段);log.segment.ms=604800000(每个日志段最大存活7天,单位:毫秒)。适用于需要保留每个key最新值的场景(如实时数据处理),通过以下参数配置:
log.cleanup.policy=compact;log.cleaner.enable=true(默认开启);log.cleaner.io.max.bytes.per.second=104857600(限制压缩速度为100MB/s,避免影响生产);log.cleaner.threads=4(设置4个压缩线程,提升压缩效率)。Kafka通过log4j.properties文件控制日志文件的轮转(切割),避免单个日志文件过大:
log4j.appender.kafkaAppender.MaxFileSize=100MB(每个日志文件最大100MB);log4j.appender.kafkaAppender.RollingPolicy.TimeBasedTriggeringPolicy.Interval=7(保留7天的日志文件);log4j.appender.kafkaAppender.RollingPolicy.MaxHistory=30(最多保留30个日志文件);log4j.appender.kafkaAppender.RollingPolicy=org.apache.log4j.RollingFileAppender(基于时间和大小的滚动策略)。使用tail -f命令实时查看Kafka日志文件(如server.log)的内容:
tail -f /var/kafka/logs/server.log
使用Kafka自带的kafka-dump-log.sh脚本查看日志段文件(如topic-partition.log)的详细内容:
./bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files /var/kafka/logs/test-topic-0.log
编写Shell脚本定期清理旧日志文件(如保留最近7天的server.log):
#!/bin/bash
LOG_DIR=/var/kafka/logs
COUNT=7
ls -t $LOG_DIR/server.log* | tail -n +$((COUNT+1)) | xargs rm -f
添加到crontab中实现周期性执行(每周日凌晨0点执行):
0 0 * * 0 /var/kafka/scripts/clean_kafkalog.sh
通过server.properties文件中的log4j.logger参数调整Kafka日志级别,可选值包括ERROR(仅错误)、WARN(警告和错误)、INFO(默认,常规信息)、DEBUG(调试信息)、TRACE(详细跟踪)。例如,设置为DEBUG级别以获取更详细的日志:
log4j.logger.kafka=DEBUG
修改后需重启Kafka服务使配置生效。
log.retention.hours=1)可能导致数据丢失,生产环境建议保留至少7天;log.flush.interval.ms=100)会影响Kafka吞吐量,建议根据硬件配置调整(如设置为1000毫秒);