MessageListenerContainer Двойные метрики - PullRequest
0 голосов
/ 18 октября 2019

У меня есть тема, которая имеет коэффициент репликации и разделения 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 |outgoing_byte_rate: 4.509248897373444 kafka-health-check-0 |outgoing_byte_rate: 7.905659134330325 kafka-health-check-0 |outgoing_byte_rate: 4.5120706122583405

1 Ответ

0 голосов
/ 19 октября 2019

У 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(), чтобы просто получить его потребительские метрики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...