前段时间在想Kafka怎么监控、怎么知道生产的消息或消费的消费是否有丢失,目前有几个开源的Kafka监控框架这里整理了下,不过这几个框架都有各自的问题侧重点不一样;
1、Kafka Monitor
2、Availability-Monitor-for-Kafka
3、Kafka Web Console
4、Kafka Manage
5、KafkaOffsetMonitor
kafka-monitor
git clone https://github.com/linkedin/kafka-monitor.git
cd kafka-monitor
./gradlew jar //下载依赖,这个会比较久编译源码
启动KafkaMonitor
./bin/kafka-monitor-start.sh config/kafka-monitor.properties
启动端到端监控Kafka集群:
./bin/end-to-end-test.sh --topic test --broker-list localhost:9092 --zookeeper localhost:2181
打开监控页面:http://localhost:8000/index.html 页面显示 kafka实时的度量监控值(例如,服务可用性,消息丢失率)动态图显示
Kafka-monitor把度量监控信息写入JMX中,并使用jolokia框架所以可以通过http请求获取监控的度量值;
curl localhost:8778/jolokia/read/kmf.services:type=produce-service,name=*/produce-availability-avg
Kafka-monitor与Kafka为同根同源的都是LinkedIn公司开源的不过Kafka-minitor刚开源没半年所有功能相对于其他监控框架来说比较简单;
kafka-monitor启动后会启动一个produce、一个consume,broker过时时间为10分钟; 用于捕获服务的可用性、消息丢失率、延迟率等,可监控集群与单个kafka;
kafka-monitor默认自动创建监控topic,可以修改为已经存在的topic,自动增加partition,确保监控topic的partition# >= broker#
produce用于生成消息到kafka,并产生生成速率、可用性度量数据
consume从kafka中消费消息,并产生消息丢失率、消息重复率、端到端延迟 依赖生产服务来提供消息内嵌的消息序列号和时间戳。
KafkaManager
KafkaManager为Yahoo开源的KafkaManager管理工具, 可管理多个集群; 能够更容易地检查集群的状态, 能够创建主题, 执行首选的副本选择,能够基于集群当前的状态生成分区分配,并基于生成的分配执行分区的重分配 检查集群状态可以发现集群中主题分布不均匀、分区分布不均匀等,
KafkaManager 编译生成,下载依赖会比较久
Availability Monitor for Kafka
Availability Monitor for Kafka微软开源的Kafka可用性、延迟性的监控框架,提供JMX接口,并可存入SqlServer;
AvailabilityMonitor可监控发送与读取数据的可用性、延迟;
Producer可用性=所有主题和分区成功发送消息数/尝试发送消息数
Consumer可用性=所有主题和分区消息成功读取数/消息尝试读取数
通过往Producer发送数据测试Producer的可用性与延迟,消息以CanaryMessage_为前缀,可以通过producerProperties.json修改;
通过从所有分区的尾部读取数据来衡量Consumer的可用性与延迟