You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ch...@apache.org on 2022/08/17 21:58:19 UTC
[flink] branch master updated: [FLINK-28488][kafka] Only forward measurable Kafka metrics and ignore others
This is an automated email from the ASF dual-hosted git repository.
chesnay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new 3c2fa303074 [FLINK-28488][kafka] Only forward measurable Kafka metrics and ignore others
3c2fa303074 is described below
commit 3c2fa303074453d4f4c95c2290b9b773684dac61
Author: Chesnay Schepler <ch...@apache.org>
AuthorDate: Wed Aug 17 18:01:34 2022 +0200
[FLINK-28488][kafka] Only forward measurable Kafka metrics and ignore others
---
.../internals/metrics/KafkaMetricWrapper.java | 7 +++++-
.../metrics/KafkaMetricMutableWrapperTest.java | 29 ++++++++++++++--------
2 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/flink-connectors/flink-connector-kafka/src/main/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricWrapper.java b/flink-connectors/flink-connector-kafka/src/main/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricWrapper.java
index 23617b544c9..1ab41ce9c9b 100644
--- a/flink-connectors/flink-connector-kafka/src/main/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricWrapper.java
+++ b/flink-connectors/flink-connector-kafka/src/main/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricWrapper.java
@@ -32,6 +32,11 @@ public class KafkaMetricWrapper implements Gauge<Double> {
@Override
public Double getValue() {
- return (Double) kafkaMetric.metricValue();
+ final Object metricValue = kafkaMetric.metricValue();
+ // Previously KafkaMetric supported KafkaMetric#value that always returned a Double value.
+ // Since this method has been deprecated and is removed in future releases we have to
+ // manually check if the returned value is Double. Internally, KafkaMetric#value also
+ // returned 0.0 for all not "measurable" values, so we restored the original behavior.
+ return metricValue instanceof Double ? (Double) metricValue : 0.0;
}
}
diff --git a/flink-connectors/flink-connector-kafka/src/test/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricMutableWrapperTest.java b/flink-connectors/flink-connector-kafka/src/test/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricMutableWrapperTest.java
index 818794ef6fa..952f0fdc411 100644
--- a/flink-connectors/flink-connector-kafka/src/test/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricMutableWrapperTest.java
+++ b/flink-connectors/flink-connector-kafka/src/test/java/org/apache/flink/streaming/connectors/kafka/internals/metrics/KafkaMetricMutableWrapperTest.java
@@ -18,10 +18,12 @@
package org.apache.flink.streaming.connectors.kafka.internals.metrics;
+import org.apache.flink.metrics.Gauge;
import org.apache.flink.util.TestLoggerExtension;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.producer.KafkaProducer;
+import org.apache.kafka.common.Metric;
import org.apache.kafka.common.serialization.ByteArrayDeserializer;
import org.apache.kafka.common.serialization.ByteArraySerializer;
import org.junit.jupiter.api.Test;
@@ -37,6 +39,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Properties;
import java.util.UUID;
+import java.util.function.Function;
+import java.util.stream.Stream;
import static org.apache.flink.connector.kafka.testutils.KafkaUtil.createKafkaContainer;
import static org.apache.flink.util.DockerImageVersions.KAFKA;
@@ -56,22 +60,27 @@ class KafkaMetricMutableWrapperTest {
.withNetwork(NETWORK)
.withNetworkAliases(INTER_CONTAINER_KAFKA_ALIAS);
+ @Test
+ void testOnlyMeasurableMetricsAreRegisteredWithMutableWrapper() {
+ testOnlyMeasurableMetricsAreRegistered(KafkaMetricMutableWrapper::new);
+ }
+
@Test
void testOnlyMeasurableMetricsAreRegistered() {
- final Collection<KafkaMetricMutableWrapper> metricWrappers = new ArrayList<>();
+ testOnlyMeasurableMetricsAreRegistered(KafkaMetricWrapper::new);
+ }
+
+ private static void testOnlyMeasurableMetricsAreRegistered(
+ Function<Metric, Gauge<Double>> wrapperFactory) {
+ final Collection<Gauge<Double>> metricWrappers = new ArrayList<>();
final KafkaConsumer<?, ?> consumer = new KafkaConsumer<>(getKafkaClientConfiguration());
final KafkaProducer<?, ?> producer = new KafkaProducer<>(getKafkaClientConfiguration());
- consumer.metrics()
- .forEach(
- (name, metric) ->
- metricWrappers.add(new KafkaMetricMutableWrapper(metric)));
- producer.metrics()
- .forEach(
- (name, metric) ->
- metricWrappers.add(new KafkaMetricMutableWrapper(metric)));
+ Stream.concat(consumer.metrics().values().stream(), producer.metrics().values().stream())
+ .map(wrapperFactory::apply)
+ .forEach(metricWrappers::add);
// Ensure that all values are accessible and return valid double values
- metricWrappers.forEach(KafkaMetricMutableWrapper::getValue);
+ metricWrappers.forEach(Gauge::getValue);
}
private static Properties getKafkaClientConfiguration() {