我有一个主题是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
答案 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()
以获取其消费者指标。