温馨提示×

kafka日志清理ubuntu上如何操作

小樊
54
2025-11-15 16:24:44
栏目: 智能运维

Kafka 日志清理在 Ubuntu 上的操作指南

一 先明确两类日志

  • Kafka 服务端数据日志(消息存储):位于 broker 配置项 log.dirs 指定的目录(常见如 /var/lib/kafka/data/opt/kafka/logs),按主题分区切分为多个 LogSegment,由 Kafka 自身的清理/压缩机制管理。
  • Kafka 运行日志(server.log 等):由 log4j/logback 输出到配置的 logs/ 目录(常见如 /var/log/kafka/server.log),适合用 logrotate 或脚本定时清理。

二 清理 Kafka 服务端数据日志(推荐方式)

  • 配置保留策略(server.properties)
    • 基于时间的删除:设置保留阈值,优先级为 log.retention.ms > log.retention.minutes > log.retention.hours,默认 log.retention.hours=168(7 天)。示例:
      log.retention.hours=72
      log.retention.check.interval.ms=300000
      
    • 基于大小的删除:设置 log.retention.bytes(默认 -1 表示不限制)。示例:
      log.retention.bytes=10737418240   # 10 GB
      
    • 清理器开关:确保 log.cleaner.enable=true(默认开启)。
    • 段大小与删除延迟:控制段滚动与删除节奏,示例:
      log.segment.bytes=1073741824   # 1 GB
      file.delete.delay.ms=60000     # 删除标记后延迟 60 秒物理删除
      
  • 选择清理策略(cleanup.policy)
    • 仅删除旧数据:log.cleanup.policy=delete
    • 仅压缩保留最新键:log.cleanup.policy=compact
    • 先压缩再按保留删除:log.cleanup.policy=compact,delete
    • 可在 broker 级设置默认策略,在 topic 级覆盖。压缩适合键控状态更新场景;若只压缩不限制大小,日志仍可能无限增长。
  • 生效与验证
    • 动态生效:优先用 kafka-configs.sh 修改 topic 级策略,避免重启。
    • 观察与核对:用 kafka-topics.sh --describe 查看配置;用 kafka-log-dirs.sh 检查各目录段数与占用;用 du/df 观察磁盘变化。

三 清理 Kafka 运行日志(server.log 等)

  • 使用 logrotate(推荐)
    • 新建配置 /etc/logrotate.d/kafka
      /var/log/kafka/*.log {
          daily
          missingok
          rotate 7
          compress
          delaycompress
          notifempty
          create 0644 kafka kafka
          sharedscripts
          postrotate
              # 若 Kafka 支持 USR1 触发重新打开日志,可按需启用
              # [ -f /var/run/kafka.pid ] && kill -USR1 $(cat /var/run/kafka.pid)
          endscript
      }
      
    • 测试与强制执行:
      sudo logrotate -d /etc/logrotate.d/kafka   # 干跑校验
      sudo logrotate -f /etc/logrotate.d/kafka   # 强制执行一次
      
  • 使用定时脚本清理旧文件(备选)
    • 示例脚本(删除 7 天前的 .log.* 文件):
      #!/usr/bin/env bash
      find /var/log/kafka -mtime +7 -name "*.log.*" -delete
      
    • 加入 crontab -e
      30 0 * * * /usr/bin/env bash /opt/scripts/clean-kafka-logs.sh
      
    • 注意仅删除已轮转的旧文件,避免影响正在写入的 server.log

四 常用参数速查表

配置项 含义 示例
log.cleaner.enable 是否开启日志清理器 true
log.cleanup.policy 清理策略:delete/compact/compact,delete compact,delete
log.retention.ms / minutes / hours 保留时间阈值(优先级 ms > minutes > hours) 604800000(7 天)
log.retention.bytes 日志总大小阈值(-1 不限制) 10737418240(10 GB)
log.retention.check.interval.ms 检查间隔 300000(5 分钟)
log.segment.bytes 段大小,触发滚动 1073741824(1 GB)
file.delete.delay.ms 删除标记后的延迟删除 60000(60 秒)
log.dirs 数据日志目录 /var/lib/kafka/data

以上参数用于 Kafka 服务端数据日志的自动清理与压缩,按业务与磁盘容量合理设置即可。

0