温馨提示×

CentOS Kafka 监控与告警实践

小樊
38
2025-11-27 21:57:19
栏目: 智能运维

CentOS Kafka 监控与告警实践

一 架构与工具选型

  • 指标采集与可视化
    • 采集:使用 Kafka Exporter 暴露 JMX 指标,端口 9308;系统层用 node_exporter 采集 CPU/内存/磁盘/网络
    • 存储与展示:用 Prometheus 抓取指标,Grafana 做可视化与面板展示。
  • 消费者延迟与消费进度
    • Burrow 监控 Consumer GroupLag,识别消费滞后与停滞。
  • 运维与管控
    • Kafka Manager(CMAK)Kafka EagleKnowStreaming 辅助多集群管理与观测。
  • 系统层监控
    • Netdata 快速查看主机健康状态(可选)。
  • 商业方案
    • Confluent Control Center 提供集中化监控与告警(适合企业版)。

二 部署与配置步骤

  • 部署 Kafka Exporter
    • 下载并启动(示例):
      • wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.3.1/kafka_exporter-1.3.1.linux-amd64.tar.gz
      • tar -xzf kafka_exporter-1.3.1.linux-amd64.tar.gz && cd kafka_exporter-1.3.1.linux-amd64
      • ./kafka_exporter --kafka.server=127.0.0.1:9092 --web.listen-address=:9308
  • 配置 Prometheus 抓取
    • 在 prometheus.yml 增加:
      • scrape_configs:
        • job_name: ‘kafka’ static_configs:
          • targets: [‘kafka_exporter_host:9308’]
    • 重启 Prometheus 生效。
  • 部署 Burrow
    • 下载并启动(示例):
      • wget https://github.com/linkedin/Burrow/releases/download/v1.4.0/Burrow-1.4.0-linux-amd64.tar.gz
      • tar -xzf Burrow-1.4.0-linux-amd64.tar.gz && cd Burrow-1.4.0
      • ./burrow --config-dir /etc/burrow
  • Grafana 可视化
    • 添加 Prometheus 数据源,导入 Kafka 仪表盘模板(社区模板编号如 7589),按需调整。
  • 系统层监控
    • 安装 node_exporter(每个 Kafka 节点),Prometheus 抓取 9100 端口。
    • 可选:安装 Netdata(http://:19999)用于快速排障。

三 关键监控指标与阈值建议

  • 主机与实例容量
    • 磁盘使用率:>80% 即告警(紧急);容量满可能导致写入失败或被封禁。
    • 内存使用率:>90% 持续 3 次告警(紧急);考虑扩容或优化堆/页缓存。
    • CPU 使用率:>90% 持续 3 次告警(重要);检查热点分区、GC、磁盘 IO。
    • 分区数:已用分区数 > 实例上限的 90%(重要);提前扩容或拆分业务。
  • 连接与带宽
    • 实例连接数百分比:>80%(重要);预防客户端无法建连。
    • 生产/消费带宽百分比:各自 > 80%(重要);预防生产/消费失败或延迟上升。
  • 消费延迟与堆积
    • 消费组未消费消息大小:>100000 MB(重要);结合业务设置上限,预防实时性劣化。
    • 分区未消费消息个数:>100000(重要);预防 Rebalance 与消费雪崩。
    • 通用堆积策略:堆积量 > 业务上限的 90% 立即告警(重要);优先排查异常消费者与扩容消费者。
  • 说明
    • 阈值需结合 SLA/RT/容量规划 调优;云上实例在 100% 磁盘 时可能被写封禁,务必提前扩容。

四 告警规则示例 Prometheus + Alertmanager

  • 磁盘容量
    • expr: 1 - (node_filesystem_avail_bytes{mountpoint=“/”} / node_filesystem_size_bytes{mountpoint=“/”})
    • for: 5m
    • labels: severity=critical
    • annotations: summary=“Disk usage high on {{ $labels.instance }}”, description=“Mountpoint {{ $labels.mountpoint }} is {{ $value | humanizePercentage }} used.”
  • Broker 内存
    • expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
    • for: 15m
    • labels: severity=critical
    • annotations: summary=“Memory usage high on {{ $labels.instance }}”
  • 分区数接近上限
    • expr: kafka_topic_partition_current{job=“kafka”} / kafka_topic_partition_limit{job=“kafka”} > 0.9
    • for: 0m
    • labels: severity=warning
    • annotations: summary=“Partition usage > 90% on cluster {{ $labels.cluster }}”
  • 消费组堆积(按业务上限)
    • expr: sum by (group,topic) (kafka_consumergroup_lag{job=“kafka”}) > on(group,topic) group_left kafka_consumergroup_lag_threshold{job=“kafka”} * 0.9
    • for: 5m
    • labels: severity=warning
    • annotations: summary=“Consumer lag > 90% threshold”, description=“Group {{ $labels.group }} topic {{ $labels.topic }} lag is {{ $value }}”
  • 运行与通知
    • 将规则保存至规则文件(如 kafka.rules.yml),在 Prometheus 中加载;配置 AlertmanagerWebhook/邮件/企业微信/钉钉 等接收器,分组、抑制与静默按需设置。

五 日常巡检与优化要点

  • 消费者健康
    • 避免长阻塞 poll、频繁 GC、处理线程不足;确保 分区数 ≥ 消费者数,减少 Rebalance 与滞后。
  • 分区与容量
    • 预估峰值吞吐与分区布局,避免热点;分区数接近上限时提前扩容或拆分业务。
  • 存储与 IO
    • 监控 磁盘 IO 等待写放大;保留策略与日志段大小合理设置,避免频繁刷盘。
  • 连接与带宽
    • 关注 连接泄漏带宽打满;优化客户端连接池与批量参数(如 linger/批量大小)。
  • 版本与依赖
    • 升级 Kafka/Exporter/Burrow 至稳定版本;JMX 暴露与认证按最小权限配置。

0