我创建了一个实现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,然后它再也不会被调用。如何使公制记录仪再次启动?
谢谢!
答案 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);
}