1. 配置Kafka日志基础参数
在server.properties中设置日志存储目录、日志段大小及保留策略,是有效管理日志的前提。关键参数包括:
log.dirs=/path/to/kafka/logs(建议使用独立分区,避免影响系统盘);log.segment.bytes=1073741824(默认1GB,当日志段达到该大小时生成新分段,便于后续清理);log.retention.hours=168(保留7天,超过则删除);log.retention.bytes=1073741824(每个分区最大1GB,超过则删除旧数据);log.segment.ms=604800000(7天,与log.retention.hours配合使用,任一条件满足即触发清理)。2. 选择合适的日志清理策略
Kafka支持两种核心清理策略,需根据业务需求选择:
log.cleanup.policy=delete;log.cleaner.enable=true(默认开启),并调整压缩参数(如log.cleaner.threads=4设置压缩线程数,log.cleaner.io.max.bytes.per.second=104857600限制压缩速度,避免影响Broker性能)。3. 使用logrotate进行日志轮转
Debian系统自带logrotate工具,可实现Kafka日志的定期分割、压缩和删除,避免单个日志文件过大。配置步骤:
/etc/logrotate.d/kafka文件,添加以下内容:/path/to/kafka/logs/*.log {
daily # 每天轮转
missingok # 忽略缺失文件
rotate 7 # 保留7天日志
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(避免当天日志未写完)
ifempty # 空日志也轮转
notifempty # 非空才轮转
create 0644 kafka kafka # 创建新日志文件并设置权限
}
sudo logrotate -d /etc/logrotate.d/kafka(模拟运行),确认无误后logrotate会自动按计划执行(通常由cron每日触发)。4. 监控与报警配置
通过监控工具实时跟踪日志状态,及时预警磁盘空间不足或清理异常:
Prometheus+Grafana监控Kafka日志目录的磁盘使用率(如df -h /path/to/kafka/logs),设置阈值报警(如超过80%时触发邮件/短信通知);kafka.log:type=Log,name=Size等JMX指标,可通过JConsole或Prometheus JMX Exporter采集,监控日志大小变化;find /path/to/kafka/logs/ -size +10G -exec echo "日志文件超过10GB" \;),通过cron定时执行,若发现问题则发送报警。5. 定时任务辅助清理
对于无法通过上述方式覆盖的场景(如临时日志),可使用cron定时执行清理脚本:
.log文件):#!/bin/bash
find /path/to/kafka/logs/ -name "*.log" -mtime +7 -exec rm -f {} \;
cron任务:crontab -e,添加以下内容(每天凌晨2点执行):0 2 * * * /path/to/cleanup_script.sh
chmod +x /path/to/cleanup_script.sh)。6. 日志级别优化
调整Kafka日志级别,减少不必要的日志输出(如DEBUG级别会产生大量详细日志),降低日志存储压力:
log4j.properties文件(位于config目录),修改根日志级别:log4j.rootLogger=WARN, stdout # 将DEBUG改为WARN,仅输出警告及以上级别日志
bin/kafka-server-stop.sh && bin/kafka-server-start.sh config/server.properties。