不推荐使用Apache KafkaMetric值方法,如何使用metricValue代替?

时间:2018-07-06 14:27:34

标签: java apache-kafka spring-kafka

所以我创建了一个从Kafka主题获取指标的函数

    public <T extends KafkaTemplate> Double getMetricValue(String key, T kafkaTemplate) {
    for (final Object set : kafkaTemplate.metrics().entrySet()) {
        Map.Entry map = (Map.Entry) set;
        MetricName metricName = (MetricName) map.getKey();
        KafkaMetric kafkaMetric = (KafkaMetric) map.getValue();

        if (metricName.name().equals(key)) {
            return kafkaMetric.value();
        }
    }

    return 0.0;
}

它将用于例如:Utils.getMetricValue("buffer-available-bytes", kafkaTemplate);

问题是,现在根据文档:https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/common/Metric.html value方法已弃用!它正在返回Double。

现在我们需要使用metricValue,它返回Object,但是没有文档说明如何使用它,我也无法通过谷歌搜索找到任何示例。

那么有什么主意如何最好地改用上述功能以改为使用metricValue?我想摆脱此过时警告,并在以后做证明。

这是我讨厌Java的另一个主要示例。文档中没有使用示例是它的规范:(

1 个答案:

答案 0 :(得分:0)

我研究了源代码。 metricValue()可以返回两个不同的值。

  1. 它返回Double-确切为value()
  2. 它返回类型T-我认为这取决于您对Kafka的实现。

由于您输入了buffer-available-bytes,我希望Double在您的情况下会返回。

有很多关于Java的文档...在这种情况下不是。我认为缺少文档是由于Kafka的组合主要用于企业中,而这种变化是相对较新的。

我建议您研究源代码并找出org.apache.kafka.common.metrics.Metrics中使用的默认类型。

最后一个音符。这不是Spring-Kafka特有的,但与Apache-Kafka有关。