Apache kafka 在spring应用程序prometheus中启用kafka客户端指标
我有一个应用程序,它使用卡夫卡主题并生成卡夫卡主题。我正在尝试设置Grafana仪表板以显示卡夫卡指标。我正试图向普罗米修斯公开卡夫卡指标,这样格拉法纳仪表板就可以获取这些指标并进一步显示它们 下面是我正在使用的库和属性Apache kafka 在spring应用程序prometheus中启用kafka客户端指标,apache-kafka,grafana,spring-kafka,Apache Kafka,Grafana,Spring Kafka,我有一个应用程序,它使用卡夫卡主题并生成卡夫卡主题。我正在尝试设置Grafana仪表板以显示卡夫卡指标。我正试图向普罗米修斯公开卡夫卡指标,这样格拉法纳仪表板就可以获取这些指标并进一步显示它们 下面是我正在使用的库和属性 org.apache.kafka:kafka-clients:jar:2.5.1:compile io.micrometer:micrometer-registry-prometheus:jar:1.5.4:compile io.micrometer:micrometer-je
org.apache.kafka:kafka-clients:jar:2.5.1:compile
io.micrometer:micrometer-registry-prometheus:jar:1.5.4:compile
io.micrometer:micrometer-jersey2:jar:1.5.4:compile
应用程序属性:
spring.jmx.enabled=true
management.endpoints.web.base-path=/
management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=prometheus
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
prometheus使用测微计显示jvm、tomcat相关指标以及自定义指标。但卡夫卡的衡量标准并未曝光。我试着调试,却毫无头绪地离开了。任何建议都会大有帮助
作为提醒,我没有使用spring kafka注释。我将它作为独立的多线程运行,在这里我使用consumer.poll(1000L)
方法获取记录
卡夫卡消费者创建为:新卡夫卡消费者(getProps())
,卡夫卡制作人创建为新卡夫卡制作人(props)
props.put(ConsumerConfig.BOOTSTRAP\u SERVERS\u CONFIG,…);
put(ConsumerConfig.CLIENT_ID_CONFIG,CONFIG.getConsumerName());
put(ConsumerConfig.GROUP_ID_CONFIG,CONFIG.getGroupId());
put(ConsumerConfig.KEY_反序列化器_CLASS_CONFIG,CONFIG.getKeyDeserializer());
put(ConsumerConfig.VALUE_反序列化器_CLASS_CONFIG,CONFIG.getValueDeserializer());
put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,CONFIG.getenableautocomit());
put(ConsumerConfig.RECEIVE\u BUFFER\u CONFIG,CONFIG.getReceiveBufferBytes());
put(ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG,CONFIG.getMaxPartitionFetchBytes());
put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG,CONFIG.getMaxPollRecords());
put(ConsumerConfig.PARTITION\u ASSIGNMENT\u STRATEGY\u CONFIG,RoundRobinAssignor.class.getName());
受保护的KafkaConsumer getConsumer(列表输入OPIC){
卡夫卡消费者=新卡夫卡消费者(道具);
consumer.subscribe(InputOpics,new ConsumerBalanceListener()){
@凌驾
已撤销分区上的公共void(集合分区){
info(“已撤销分区:”+分区);
consumer.commitAsync();
}
@凌驾
已签名的分区上的公共void(集合分区){
logger.info(“分配的分区:”+分区);
}
});
退货消费者;
}
我已经在Gitter上回答了您的问题-上面的代码没有将Spring用于Apache Kafka,您正在创建自己的消费者和生产者
如果您将Spring用于Apache Kafka的DefaultKafkanConsumerFactory
,则可以向其添加千分尺ConsumerListener
,Spring将通过KafkaClientMetrics
向仪表注册表注册每个消费者的指标。如果你创造自己的消费者,你必须自己创造
制片人也是如此。谢谢Gary,我会检查是否可以将其更改为spring kafka以获取这些指标
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, ...);
props.put(ConsumerConfig.CLIENT_ID_CONFIG, config.getConsumerName());
props.put(ConsumerConfig.GROUP_ID_CONFIG, config.getGroupId());
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, config.getKeyDeserializer());
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, config.getValueDeserializer());
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, config.getEnableAutoCommit());
props.put(ConsumerConfig.RECEIVE_BUFFER_CONFIG, config.getReceiveBufferBytes());
props.put(ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG, config.getMaxPartitionFetchBytes());
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, config.getMaxPollRecords());
props.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, RoundRobinAssignor.class.getName());
protected KafkaConsumer<byte[], Event> getConsumer(List<String> inputTopics) {
KafkaConsumer<byte[], Event> consumer = new KafkaConsumer<>(props));
consumer.subscribe(inputTopics, new ConsumerRebalanceListener() {
@Override
public void onPartitionsRevoked(Collection<TopicPartition> partitions) {
logger.info("PARTITIONS revoked: " + partitions);
consumer.commitAsync();
}
@Override
public void onPartitionsAssigned(Collection<TopicPartition> partitions) {
logger.info("PARTITIONS assigned: " + partitions);
}
});
return consumer;
}