Kafka通过JMX(Java Management Extensions)暴露内部配置和运行指标,是监控的核心基础。需修改Kafka启动脚本以启用JMX:
编辑kafka-server-start.sh(通常位于/usr/local/kafka/bin/或/opt/kafka/bin/),在脚本开头添加以下配置:
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<your_kafka_broker_ip>"
其中<your_kafka_broker_ip>替换为Kafka broker的实际IP地址,默认JMX端口为9999(可通过-Dcom.sun.management.jmxremote.port修改)。
Kafka自带的工具可直接查看配置信息和运行状态,无需额外安装软件:
bin/kafka-topics.sh --bootstrap-server <broker-ip>:9092 --describe --topic <topic-name>
可获取主题的分区数、副本数、保留时间(retention.ms)、分区策略等配置。bin/kafka-consumer-groups.sh --bootstrap-server <broker-ip>:9092 --describe --group <group-name>
可查看消费者组的auto.offset.reset(偏移量重置策略)、enable.auto.commit(自动提交开关)、max.poll.records(单次拉取最大记录数)等配置。bin/kafka-configs.sh --bootstrap-server <broker-ip>:9092 --describe --entity-type brokers --entity-name <broker-id>
可获取Broker级别的配置(如num.partitions、log.dirs、listeners等)。通过第三方工具可实现Kafka配置的实时监控、可视化及告警,适合生产环境:
Prometheus + Grafana:
config.yml),指定Kafka broker地址和版本,运行kafka_exporter暴露/metrics接口。prometheus.yml,添加Kafka Exporter的抓取任务:scrape_configs:
- job_name: 'kafka'
metrics_path: '/metrics'
static_configs:
- targets: ['<kafka_exporter_ip>:9308']
Kafka Cluster Monitoring),可监控Broker配置变更、分区状态、消费者滞后等指标。Kafdrop:基于Web的Kafka管理工具,提供直观的Web界面查看主题、消费者组、Broker配置。通过Docker快速部署:
docker run -d --rm -p 9000:9000 \
-e KAFKA_BROKERCONNECT=<broker-ip>:9092 \
-e SERVER_SERVLET_CONTEXTPATH="/" \
obsidiandynamics/kafdrop
访问http://<host-ip>:9000即可查看Kafka配置和运行状态。
Burrow:专注于监控Kafka消费者偏移量的工具,可检测消费者延迟、偏移量超限等问题。通过Docker运行:
docker run -d --rm -p 8080:8080 \
-e KAFKA_BROKERS=<broker-ip>:9092 \
-e GROUP_WHITELIST=".*" \
quay.io/linkedin/burrow:latest
访问http://<host-ip>:8080查看消费者配置和状态。
Kafka日志中会记录配置加载、错误及警告信息,通过监控日志可及时发现配置异常:
/var/log/kafka/server.log(若修改过log.dirs配置,则需到指定目录查看)。tail命令实时查看最新日志:tail -f /var/log/kafka/server.log
grep过滤:grep "Config" /var/log/kafka/server.log
可获取Broker配置加载、消费者组配置变更等信息。若需监控特定配置或实现自定义告警,可编写脚本调用Kafka API采集指标。例如,使用Shell脚本定期检查消费者组滞后情况:
#!/bin/bash
GROUP_NAME="my-group"
BROKER="localhost:9092"
LAG=$(bin/kafka-consumer-groups.sh --bootstrap-server $BROKER --describe --group $GROUP_NAME | awk -F' ' '{print $5}')
THRESHOLD=1000
if [ "$LAG" -gt "$THRESHOLD" ]; then
echo "Consumer group $GROUP_NAME lag exceeds threshold: $LAG" | mail -s "Kafka Lag Alert" admin@example.com
fi
将脚本添加到cron定时任务(如每5分钟运行一次),可实现消费者滞后的自动告警。