Kafka通过server.properties文件中的log.dirs参数指定日志存储路径(如/data/kafka-logs),支持配置多个目录(逗号分隔),有助于分散磁盘I/O负载。修改后需重启Kafka服务使配置生效。
Kafka提供两种核心日志清理策略,需根据业务需求选择:
log.cleanup.policy=delete设置,自动删除过期或超大小的日志。需配合以下参数调整清理规则:
log.retention.hours:日志保留最大小时数(如168表示保留7天);log.retention.bytes:每个分区最大日志大小(如1073741824表示1GB);log.segment.bytes:单个日志段最大大小(如1073741824表示1GB);log.retention.check.interval.ms:日志清理检查间隔(默认5分钟)。log.cleanup.policy=compact设置,仅保留每个键的最新值,减少存储占用。需启用log.cleaner.enable=true(默认开启),并调整log.cleaner.threads(压缩线程数)和log.cleaner.io.max.bytes.per.second(压缩吞吐量限制)优化性能。Kafka日志轮转可通过log4j配置或系统logrotate工具实现:
config/log4j.properties文件,调整kafkaAppender的滚动策略:log4j.appender.kafkaAppender=org.apache.log4j.RollingFileAppender
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log
log4j.appender.kafkaAppender.MaxFileSize=100MB # 单个日志文件最大100MB
log4j.appender.kafkaAppender.MaxBackupIndex=30 # 保留30个历史日志文件
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern=%d{ISO8601} %p %c{1}:%L - %m%n
修改后重启Kafka服务生效。/etc/logrotate.d/kafka文件,添加以下内容实现每日轮转、保留7天、压缩历史日志:/usr/local/kafka/logs/server.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 644 root root
}
logrotate会自动按计划执行轮转,无需重启Kafka。tail -f命令查看Kafka broker或主题日志(如/data/kafka-logs/server.log或/data/kafka-logs/topic-name-0.log):tail -f /data/kafka-logs/server.log
kafka-dump-log.sh脚本查看特定日志文件的详细内容(如偏移量、消息大小):bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files /data/kafka-logs/topic-name-0.log
Kafka的日志级别决定了日志输出的详细程度,可通过log4j.properties文件调整:
ERROR(仅错误)、WARN(警告)、INFO(默认,常规信息)、DEBUG(调试)、TRACE(详细跟踪)。DEBUG以获取更详细的调试信息:log4j.logger.kafka=DEBUG, kafkaAppender
修改后需重启Kafka服务使级别生效。