【问题标题】:Apache Kafka JMX Metrics with Spring Boot使用 Spring Boot 的 Apache Kafka JMX 指标
【发布时间】:2021-03-25 05:56:23
【问题描述】:

全部,

我需要将 Apache Kafka 指标公开给 Spring Boot (v 2.3.0.RELEASE) 执行器端点。

请注意,我没有使用spring-kafka库。

我正在使用以下库

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-streams</artifactId>
            <version>2.5.0</version>
        </dependency>


        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.5.0</version>
        </dependency>

我已经尝试过这个spring.jmx.enabled=true,但似乎这不起作用。我认为这是因为 spring 没有管理 kafka。

有没有办法可以将这些 JMX 指标绑定到千分表 MeterRegistry?

我可以使用 prometheus 提供的 jmx-exporter 来完成这项工作,但由于这需要一个在不同端口上运行的代理,我希望使用默认的 Micrometer 和 spring boot 来完成这项工作。

【问题讨论】:

    标签: spring spring-boot apache-kafka micrometer spring-micrometer


    【解决方案1】:

    你试过KafkaClientMetricsKafkaStreamsMetricsKafkaConsumerMetrics吗? KafkaConsumerMetrics 通过 JMX 收集指标,但已弃用,取而代之的是 KafkaClientMetrics

    您只需要创建它们并绑定到您的注册表:

    KafkaConsumer<String, String> consumer;
    KafkaProducer<String, String> producer;
    MeterRegistry registry;
    
    ...
    
    new KafkaClientMetrics(consumer).bindTo(registry);
    new KafkaClientMetrics(producer).bindTo(registry);
    

    同样适用于KafkaStreams

    new KafkaStreamsMetrics(kafkaStreams).bindTo(registry);
    

    如果 Spring 不管理您的 Kafka 组件,您为什么期望 spring.jmx.enabled=true 做任何事情?

    【讨论】:

    • 哦,我忘了这个线程。 (我相信我们也在千分尺问题部分对此进行了讨论)。所以,我能够解决这个问题。由于我的代码使用了Kstreams,所以上面的配置不能直接工作。为了使用 Kstreams 实现这一点,应该有一个用 EventListener(ContextRefreshedEvent.class) 注释的公共方法,在其中我从 StreamsBuilderFactoryBean.getKafkaStreams() 获取流实例...一旦完成,我使用流对象创建 KafkaStreamsMetrics 对象,然后将其绑定到meterRegistry
    • @RahulKumar 你拯救了我的一天!
    • @RahulKumar 你能分享一下如何使用 Spring boot 查看 Kafka 生产者指标的示例代码
    猜你喜欢
    • 2020-07-11
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2019-01-08
    • 2021-06-16
    • 2020-09-13
    • 2020-10-08
    • 2021-09-22
    相关资源
    最近更新 更多