Kafka日志清理在Linux上的最佳实践
通过server.properties文件调整核心参数,平衡存储占用与数据可用性:
log.retention.hours=168(保留7天)、log.retention.bytes=1073741824(每个分区最大1GB),避免日志无限增长;log.segment.bytes=1073741824(每个分段最大1GB)、log.segment.ms=604800000(每个分段最长1周),强制分割日志段以便清理;log.cleanup.policy=delete(默认,删除过期日志)或compact(压缩,保留每个key的最新值,适用于需要数据去重的场景);log.cleanup.policy=compact),需设置log.cleaner.enable=true(启用压缩器)、log.cleaner.threads=4(4个压缩线程)、log.cleaner.io.max.bytes.per.second=104857600(限制压缩速度为100MB/s,避免影响生产性能)。/etc/logrotate.d/kafka配置文件,内容如下:/var/log/kafka/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/bin/killall -HUP kafka-server # 重启Kafka进程以重新打开日志文件
endscript
}
该配置实现每日轮转、保留7天压缩日志、非空文件才轮转的功能。/path/to/kafka-log-cleanup.sh:#!/bin/bash
LOG_DIR="/var/log/kafka"
find "$LOG_DIR" -type f -name "*.log" -mtime +7 -exec rm -f {} \; # 删除7天前的日志文件
添加Cron任务(crontab -e):0 0 * * * /path/to/kafka-log-cleanup.sh,每天0点执行清理。/var/log/kafka),避免占用系统盘空间;修改server.properties中的log.dirs=/var/log/kafka,重启Kafka生效。kafka)运行Kafka服务,避免root权限带来的安全风险:useradd -r -s /sbin/nologin kafka
chown -R kafka:kafka /var/log/kafka
df -h /var/log/kafka定期检查磁盘使用率,设置阈值告警(如80%时触发邮件/短信通知);kafka_log_log_size(日志大小)、kafka_log_cleaner_cleanable_ratio(可清理比例)等指标,及时发现日志增长异常;kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic <topic-name>,检查Size字段是否符合保留策略。rsync或scp将/var/log/kafka目录备份至远程存储(如NFS、S3):rsync -avz /var/log/kafka/ user@backup-server:/remote/backup/kafka/
或使用Kafka自带的kafka-log-dirs工具备份指定分区的日志;kafka-run-class.sh kafka.tools.RecoverLogCleaner工具恢复被清理的日志(需提前开启log.cleaner.enable=true)。-Xmx4G)和CPU资源,避免日志清理或压缩过程成为性能瓶颈。