Kafka Consumer Custom MetricReporter未收到指标

时间:2018-09-06 21:08:10

标签: java apache-kafka metrics consumer datadog

我创建了一个实现org.apache.kafka.common.metrics.KafkaMetric的类,如下所示:

public class DatadogMetricTracker implements MetricsReporter {

    @Override
    public void configure(Map<String, ?> configs) {
        System.out.println(configs);
    }

    @Override
    public void init(List<KafkaMetric> metrics) {
        System.out.println(metrics);
    }

    @Override
    public void metricChange(KafkaMetric metric) {
        System.out.println(metric.metricName().name() + ": " + metric.value() + " tags: " + metric.metricName().tags());
    }

    @Override
    public void metricRemoval(KafkaMetric metric) {

    }

    @Override
    public void close() {

    }

}

然后,当我设置Kafka道具时,我将该班注册为度量报告者:

properties.put(ConsumerConfig.METRIC_REPORTER_CLASSES_CONFIG, "com.myco.utils.DatadogMetricTracker");

启动我的使用者时,configure被调用,而init,则metricChange被调用一次,其中一批度量值均为0或-Infinity,然后它再也不会被调用。如何使公制记录仪再次启动?

谢谢!

2 个答案:

答案 0 :(得分:0)

我有差不多的代码。只是将值转储到日志文件。从Kafka客户端1.0版本的Beam 2.6中读取与KafkaIO相同的问题。我什至尝试设置“ metrics.sample.window.ms”和“ metrics.num.samples”之类的属性,但是没有运气。我只看到0.0或-Infinity / Infinity的值。

答案 1 :(得分:0)

检查代码,除了最初注册度量标准之外,没有调用metricChange方法。因此最好使用其他替代方法。到目前为止,由于Prometheus将从应用程序中删除指标,因此我将实施指标的定期读取并发布它们。更重要的一点是,由于值已经在内部计算出来,因此将仅使用量规来填充普罗米修斯的值

在JMX报告程序的情况下它可以工作,因为它们创建了动态bean,并且当检查了Mbean的属性值(通过JConsole或其他方法)时,调用了获取度量值的实际方法,因此该方法在这里起作用,这是代码:

        public Object getAttribute(String name) throws AttributeNotFoundException, MBeanException, ReflectionException {
            if (this.metrics.containsKey(name))
                return this.metrics.get(name).metricValue();
            else
                throw new AttributeNotFoundException("Could not find attribute " + name);
        }