监控、安全与性能基线
Kafka 健康不能只看进程存在。必须同时观测 Broker 请求错误、ISR、离线分区、Consumer Lag、磁盘、网络、JVM 和 ZooKeeper 法定人数;告警应能关联到 Topic、Broker、消费组和近期变更。

1. 关键监控项
| 范围 | 重点信号 | 风险 |
|---|---|---|
| Broker | 请求延迟和错误、JVM 堆/GC、磁盘、网络 | 客户端超时、拒绝写入、节点失效 |
| 复制 | Under Replicated Partitions、Offline Partitions、ISR 收缩 | 冗余降低或分区不可用 |
| Consumer | Lag、Lag 增长率、重平衡、提交失败 | 下游延迟、重复消费或消息过期 |
| ZooKeeper | Leader/Follower 数、会话异常、延迟和磁盘 | Controller 选举与元数据操作受阻 |
2. JMX 与网络边界
JMX 不应暴露到公网。以下配置仅适用于本机回环采集;跨主机抓取应使用 JMX Exporter、TLS、认证和网络策略。
# /etc/systemd/system/kafka.service.d/jmx.conf
[Service]
# 只监听本机回环地址,监控 Agent 从本机读取 JMX 指标。
Environment="KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
# 变更 JMX 配置后滚动重启一个 Broker,并确认端口未意外对外监听。
sudo systemctl daemon-reload
sudo systemctl restart kafka
ss -lntp | rg ':9999'
生产客户端监听应使用 TLS 或 SASL_SSL,并将客户端、Broker 内部和管理监听分离。ZooKeeper 的 2181、2888、3888 只允许 Ensemble 与 Broker 访问;业务客户端不应访问这些端口。
# server.properties:客户端与 Broker 内部监听分离的示例。
# 证书和密码由 Secret 或密钥系统挂载,不能提交到 Git。
listeners=INTERNAL://0.0.0.0:9092,CLIENT://0.0.0.0:9093
advertised.listeners=INTERNAL://kafka-1.example.internal:9092,CLIENT://kafka-1.example.internal:9093
listener.security.protocol.map=INTERNAL:SSL,CLIENT:SASL_SSL
inter.broker.listener.name=INTERNAL
ssl.keystore.location=/etc/kafka/tls/broker.keystore.jks
ssl.truststore.location=/etc/kafka/tls/broker.truststore.jks
3. 容量与调优
容量评估应包含每日写入字节、保留期、副本因子、压缩比、分区数、峰值带宽和 Broker 恢复时间。为每台 Broker 保留磁盘安全余量,磁盘接近水位时优先扩容或控制非核心流量。
# server.properties 起始值;必须基于 CPU、磁盘和压测结果调整。
# 网络线程处理客户端请求,过大可能增加上下文切换成本。
num.network.threads=8
# I/O 线程受磁盘队列、页缓存和副本同步负载限制。
num.io.threads=16
# 限制超大请求,避免单条消息挤压内存和复制带宽。
socket.request.max.bytes=104857600
4. ACL 与告警策略
ACL 应按服务账号分别授予 Topic 的 Read、Write、Describe 与 Consumer Group 的 Read 权限。先在预发验证缺权时的客户端错误,再逐步收紧生产;不能用超级用户账号作为业务应用的通用凭据。
- 任意 Offline Partition:立即告警,代表分区没有可用 Leader。
- Under Replicated Partitions 持续 5 分钟:高优先级处理,检查 Broker、磁盘与网络。
- 消费组 Lag 持续增长:按业务 Topic 和 Group 分级,观察增长速率而非单一绝对值。
- Broker 数据盘接近水位:在 Kafka 停止写入前扩容或控制非核心流量。
- ZooKeeper 存活节点少于法定人数或没有 Leader:停止 Broker 发布与维护操作,优先恢复 Ensemble。