Kafka的日志文件(包括消息日志、索引文件等)默认存储在logs目录下(如/tmp/kafka-logs),但生产环境建议修改为专用目录(如/data/kafka-logs),避免被系统或其他进程清理。
配置方法:修改server.properties文件中的log.dirs参数(多目录用逗号分隔),例如:
log.dirs=/data/kafka-logs
修改后需重启Kafka服务使配置生效。
Kafka提供两种核心日志清理策略,可根据业务需求选择或组合使用:
适用场景:需要定期清理旧数据以释放磁盘空间(如消息保留7天后删除)。
关键参数:
log.cleanup.policy:设置为delete(默认值);log.retention.ms:日志保留时间(毫秒),优先级高于log.retention.hours(默认168小时,即7天);log.retention.bytes:日志总大小限制(字节),超过则删除旧数据(默认-1,表示无限制);log.segment.bytes:单个日志段大小(默认1GB),清理按段为单位进行。log.cleanup.policy=delete
log.retention.ms=432000000
适用场景:需要保留每个key的最新值(如用户配置变更、状态更新),减少存储空间占用。
关键参数:
log.cleanup.policy:设置为compact(或delete,compact同时支持两种策略);compression.type:压缩算法(如gzip、snappy、lz4、zstd,默认producer即使用生产者设置的压缩方式)。zstd算法:log.cleanup.policy=compact
compression.type=zstd
注意:压缩策略会增加CPU开销,适合对存储空间敏感但对延迟要求不高的场景。
Kafka通过后台定时任务执行日志清理,关键参数:
log.retention.check.interval.ms:清理任务执行间隔(默认5分钟,即300000毫秒);file.delete.delay.ms:删除.deleted后缀文件前的延迟(默认1分钟,即60000毫秒),避免正在写入的文件被误删。tail -f命令查看Kafka broker或topic的日志文件,例如:tail -f /data/kafka-logs/server.log # 查看broker日志
tail -f /data/kafka-logs/topic-name-0.log # 查看特定topic的日志段
kafka-dump-log.sh脚本,例如:./bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files /data/kafka-logs/topic-name-0.log
该命令可显示日志段的偏移量、时间戳、消息大小等详细信息。通过调整日志级别,可控制Kafka日志的详细程度(如ERROR仅记录错误,DEBUG记录详细调试信息)。
配置方法:修改log4j.properties文件(位于config目录下),例如将日志级别调整为INFO:
log4j.logger.kafka=INFO
log4j.logger.org.apache.kafka=INFO
修改后需重启Kafka服务使配置生效。
/tmp目录的清理由systemd-tmpfiles管理,需将Kafka日志目录添加到清理白名单。编辑/usr/lib/tmpfiles.d/tmp.conf文件,添加以下内容:X /tmp/kafka-logs
若日志目录已迁移至/data/kafka-logs,则无需此配置。/tmp目录由tmpwatch清理,编辑/etc/cron.daily/tmpwatch文件,添加排除规则:/usr/sbin/tmpwatch "$flags" 10 /tmp | grep -v "/tmp/kafka-logs" > /dev/null
通过以上配置和管理,可有效控制Kafka日志的存储空间、保留周期,并满足不同场景下的日志分析需求。