千分尺在创建第二个卡夫卡消费者时会引发异常

问题描述 投票:0回答:1

升级到spring-boot 2.3.0时发生异常。异常如下:

java.lang.IllegalArgumentException: Prometheus requires that all meters with the same name have the same set of tag keys. There is already an existing meter named 'kafka_consumer_fetch_manager_records_consumed_total' containing tag keys [client_id, kafka_version, product, spring_id, topic]. The meter you are attempting to register has keys [client_id, kafka_version, product, spring_id].
    at io.micrometer.prometheus.PrometheusMeterRegistry.lambda$applyToCollector$17(PrometheusMeterRegistry.java:429)
    at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1932)
    at io.micrometer.prometheus.PrometheusMeterRegistry.applyToCollector(PrometheusMeterRegistry.java:413)
    at io.micrometer.prometheus.PrometheusMeterRegistry.newFunctionCounter(PrometheusMeterRegistry.java:247)
    at io.micrometer.core.instrument.MeterRegistry$More.lambda$counter$1(MeterRegistry.java:884)
    at io.micrometer.core.instrument.MeterRegistry.lambda$registerMeterIfNecessary$5(MeterRegistry.java:559)
    at io.micrometer.core.instrument.MeterRegistry.getOrCreateMeter(MeterRegistry.java:612)
    at io.micrometer.core.instrument.MeterRegistry.registerMeterIfNecessary(MeterRegistry.java:566)
    at io.micrometer.core.instrument.MeterRegistry.registerMeterIfNecessary(MeterRegistry.java:559)
    at io.micrometer.core.instrument.MeterRegistry.access$600(MeterRegistry.java:76)
    at io.micrometer.core.instrument.MeterRegistry$More.counter(MeterRegistry.java:884)
    at io.micrometer.core.instrument.FunctionCounter$Builder.register(FunctionCounter.java:122)
    at io.micrometer.core.instrument.binder.kafka.KafkaMetrics.registerCounter(KafkaMetrics.java:189)
    at io.micrometer.core.instrument.binder.kafka.KafkaMetrics.bindMeter(KafkaMetrics.java:174)
    at io.micrometer.core.instrument.binder.kafka.KafkaMetrics.lambda$checkAndBindMetrics$1(KafkaMetrics.java:161)
    at java.base/java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1603)
    at java.base/java.util.Collections$UnmodifiableMap.forEach(Collections.java:1505)
    at io.micrometer.core.instrument.binder.kafka.KafkaMetrics.checkAndBindMetrics(KafkaMetrics.java:137)
    at io.micrometer.core.instrument.binder.kafka.KafkaMetrics.bindTo(KafkaMetrics.java:93)
    at io.micrometer.core.instrument.binder.kafka.KafkaClientMetrics.bindTo(KafkaClientMetrics.java:39)
    at org.springframework.kafka.core.MicrometerConsumerListener.consumerAdded(MicrometerConsumerListener.java:74)
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createKafkaConsumer(DefaultKafkaConsumerFactory.java:301)
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createKafkaConsumer(DefaultKafkaConsumerFactory.java:242)
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createConsumer(DefaultKafkaConsumerFactory.java:212)
    at org.springframework.kafka.core.ConsumerFactory.createConsumer(ConsumerFactory.java:67)
    at org.springframework.kafka.core.ConsumerFactory.createConsumer(ConsumerFactory.java:54)
    at org.springframework.kafka.core.ConsumerFactory.createConsumer(ConsumerFactory.java:43)

[当我尝试通过ConsumerFactory.createConsumer创建使用者时发生此异常。

[应用程序中还有另一个使用者,它是通过使用@KafkaListener(topics = TOPICS,groupId = GROUP_ID)注释该方法而使用spring-kafka创建的。

io.micrometer.core.instrument.binder.kafka.KafkaMetrics第146-147行中,我读到

//Kafka has metrics with lower number of tags (e.g. with/without topic or partition tag)
//Remove meters with lower number of tags

这意味着新度量标准将缺少topic标签,因此将被丢弃。

有没有理由解释为什么创建消费者的不同方法会导致标签偏差?如果是这样,是否可以将topic标签附加到通过ConsumerFactory.createConsumer创建的指标上?

java spring-boot spring-kafka micrometer
1个回答
0
投票
我会环顾四周,但是似乎在启动使用者(@KafkaListener)时,它还会添加一些带有分配给它的主题的工具吗?到目前为止只是一个假设。

另一个堆栈较少的示例-似乎在KafkaMetrics.bindTo-> scheduler.scheduleAtFixedRate(() -> checkAndBindMetrics(registry), getRefreshIntervalInMillis(), getRefreshIntervalInMillis(), TimeUnit.MILLISECONDS);中启动计划任务时要注册主题>

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.