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資源,避免日志清理或壓縮過程成為性能瓶頸。