MessageListenerContainer重复指标

时间:2019-10-18 20:46:05

标签: spring apache-kafka spring-kafka

我有一个主题是3的复制和分区因子。

当前具有并发消息侦听器容器设置,该报告将报告所消耗的每条消息的指标。

由于某些原因,某些指标多次报告,我不确定为什么。也许这是spring-kafka的问题,而不是kafka本身的问题?

public void consumerMetrics() {
    for (MessageListenerContainer messageListenerContainer : kafkaListenerEndpointRegistry.getListenerContainers()) {
        Map<String, Map<MetricName, ? extends Metric>> metrics = messageListenerContainer.metrics();
        metrics.forEach( (clientid, metricMap) -> {
            System.out.println("for client id:" + clientid);
            metricMap.forEach((metricName, metricValue) -> {
                String cMetricName = metricName.name();
                double cMetricValue = metricValue.value();
                String cMetricNameClean = cMetricName.replaceAll("[-|.]", "_");
                System.out.println(clientid + " | " + cMetricNameClean + 
            });
        });
    }
}

当我打印指标时,我会收到重复的记录...有时2,有时3都是不同的值

kafka-health-check-0 | outward_byte_rate:4.509248897373444 kafka-health-check-0 | outward_byte_rate:7.905659134330325 kafka-health-check-0 | outward_byte_rate:4.5120706122583405

1 个答案:

答案 0 :(得分:0)

ConcurrentMessageListenerContainer具有方法getContainers()(它不在MessageListenerContainer上,因此您必须进行强制转换)。

/**
 * Return the list of {@link KafkaMessageListenerContainer}s created by
 * this container.
 * @return the list of {@link KafkaMessageListenerContainer}s created by
 * this container.
 */
public List<KafkaMessageListenerContainer<K, V>> getContainers() {

您可以调用它并遍历列表,调用getAssignedPartitions()找出您感兴趣的对象,然后对其调用metrics()以获取其消费者指标。