已开源 https://github.com/pierre94/kafka-client-prometheus-collector ,这里简单介绍下我的实现思路
一、背景
在我们场景下,需要将海量数据透传到我们的Kafka集群,这时候我们常常会遇到这些问题:
在过去我们会根据Kafka官方文档以及他人的经验总结,结合基础监控指标(如CPU、内存、网络等)可以大致总结出一个基础的评估方法。
在实际业务场景下,我们发现这种不具备可观测性的评估方法不能很好的满足我们的需求,所以我们尝试寻找一种完善的Kafka客户端内部指标的采集上报方案。
大数据领域可观测性建设可以系统学习下Apache Calcite Committer forward的文章
相比Kafka的服务端领域,我们发现开源社区普遍不太重视客户端的可观测性建设,没有一个特别完善好用的轮子。所以我们借鉴一些开源组件的思路,实现了这个小巧简单的lib来帮助开发者将kafka客户端的指标上报到Prometheus。
已具备如下基础功能:
实现逻辑也比较清晰,使用Kafka客户端Metric相关API获取到metric值,再按照我们对指标的理解翻译成Prometheus的指标值,构建Collector。
受限于kafka和Prometheus的限制,翻译模块的实现还不是很优雅。
(提供Producer的Grafana DashBoard)
与业界方案相比,我们具备如下优势:
Prometheus
完美结合,HTTP Export
和PushGateway
的推拉模型Producer
和Consumer
2种客户端类型,同时支持多个client
实例Grafana DashBoard
目前还没有传到公共仓库,仅供参考
见: https://github.com/pierre94/kafka-client-prometheus-collector
目前支持HTTP Export
和PushGateway
2种方法将指标接入到Prometheus
Producer<Integer,String> producer = new KafkaProducer<Integer, String>(props);
new KafkaClientMetricCollector(Collections.singletonList(producer)).register();
HTTPServer server = new HTTPServer(8033);
curl http://{ip}:8033/metrics
参照TestKafkaConsumerMetricCollector实现
KafkaConsumer<Integer, String> consumer1 = new KafkaConsumer<>(props);
KafkaConsumer<Integer, String> consumer2 = new KafkaConsumer<>(props);
consumer1.subscribe(Collections.singletonList("kafka_test"));
consumer2.subscribe(Collections.singletonList("kafka_test"));
List<Object> clientList = new ArrayList<>();
clientList.add(consumer1);
clientList.add(consumer2);
new KafkaClientMetricPushService(clientList,System.getenv("pushGateWayServer"), "my_kafka_client");
pushService还支持指定push间隔
// 15s 后启动上报线程,上报周期是60s
new KafkaClientMetricPushService(clientList, System.getenv("pushGateWayServer"), "my_kafka_client",15,60);
需要业务自己启动一个单独的push线程。Push
类似HTTP Export
,参考方法如下:
Collector register = new KafkaClientMetricCollector(clientList).register();
PushGateway pg = new PushGateway("127.0.0.1:9091");
pg.push(registry, "my_kafka_client_job");
org.apache.kafka.common.Metric.value
,后续考虑替换原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。