使用SSH工具(如PuTTY)登录到运行Kafka的Linux服务器,确保具备Kafka配置文件和服务的管理权限(通常为root或kafka用户)。
Kafka的日志清理策略通过**server.properties**文件配置,该文件通常位于Kafka安装目录的config子目录下(如/usr/local/kafka/config/server.properties或/etc/kafka/server.properties)。
使用文本编辑器(如vi或nano)打开文件,添加或修改以下关键参数:
log.cleanup.policy:设置日志清理策略,可选delete(默认,按时间/大小删除旧日志)或compact(压缩日志,保留每个key的最新值)。log.cleanup.policy=delete # 生产环境常用delete,若需保留key最新值则用compact log.retention.hours:设置日志保留的最大小时数(如7天=168小时),超过此时间的日志段将被删除。log.retention.hours=168 # 保留1周日志 log.retention.bytes:设置每个分区日志的最大大小(如1GB=1073741824字节),超过此大小的分区日志将被删除(优先级高于时间策略)。log.retention.bytes=1073741824 # 每个分区最大1GB log.segment.bytes:设置单个日志段的最大大小(如100MB=104857600字节),当日志段达到此大小时,Kafka会创建新段(触发清理条件)。log.segment.bytes=104857600 # 每个日志段最大100MB log.retention.check.interval.ms:设置日志清理检查的时间间隔(如5分钟=300000毫秒),Kafka会定期扫描并删除过期日志段。log.retention.check.interval.ms=300000 # 每5分钟检查一次 log.roll.hours:设置日志滚动的时间间隔(如1小时=3600秒),即使日志段未达到log.segment.bytes大小,也会强制创建新段(适用于高频写入场景)。log.roll.hours=1 # 每小时滚动一次日志段 log.cleaner.enable:若使用compact策略,需启用压缩器(默认true)。log.cleaner.enable=true # 启用日志压缩 log.cleaner.threads:设置压缩线程数(如4个),提升压缩效率(根据CPU核心数调整)。log.cleaner.threads=4 # 使用4个线程进行日志压缩 修改完成后,按Esc键退出编辑模式,输入:wq(vi编辑器)或Ctrl+O保存、Ctrl+X退出(nano编辑器)。
配置更改需重启Kafka服务才能生效,执行以下命令:
# 停止Kafka服务 sudo systemctl stop kafka # 启动Kafka服务 sudo systemctl start kafka # 检查服务状态(确认是否启动成功) sudo systemctl status kafka 通过Kafka命令行工具验证日志清理策略是否配置正确:
/usr/local/kafka/bin/kafka-configs.sh --describe --entity-type brokers --entity-name 1 输出中应包含log.cleanup.policy=delete(或compact)等配置。/usr/local/kafka/bin/kafka-configs.sh --describe --entity-type topics --entity-name your_topic_name 确认retention.ms(保留时间)或retention.bytes(保留大小)是否符合预期。df -h命令定期检查Kafka日志目录(log.dirs配置的路径,如/tmp/kafka-logs)的磁盘使用情况,避免空间耗尽。log.retention.hours、log.retention.bytes等参数。例如,若磁盘空间充足且需长期保留数据,可增大log.retention.hours;若需快速释放空间,可减小log.retention.bytes。server.log,位于logs目录)会记录清理操作的详细信息,可通过tail -f /usr/local/kafka/logs/server.log实时查看清理进度。log.retention.hours或log.retention.bytes可能导致数据丢失,生产环境需根据业务需求权衡。log.retention.check.interval.ms)可能增加Kafka broker的CPU负载,需根据集群规模调整。log.dirs)设置在系统临时目录(如/tmp),防止系统自动清理导致数据丢失(可将目录设置为/data/kafka-logs等专用目录)。