diff --git a/CHANGELOG.md b/CHANGELOG.md index 241013b..aa99fa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.36.0] - 2025-08-25 + +### Changed +- Add the `spring.id` tag to the kafka client metrics, for created kafka producers, to avoid warnings about registering meters with different tag keys + on Spring Boot 3.4+ + ## [0.35.0] - 2025-06-18 ### Changed diff --git a/gradle.properties b/gradle.properties index b621a5d..48168cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=0.35.0 +version=0.36.0 diff --git a/tw-tkms-starter/src/main/java/com/transferwise/kafka/tkms/config/TkmsKafkaProducerProvider.java b/tw-tkms-starter/src/main/java/com/transferwise/kafka/tkms/config/TkmsKafkaProducerProvider.java index 7072890..d168e2d 100644 --- a/tw-tkms-starter/src/main/java/com/transferwise/kafka/tkms/config/TkmsKafkaProducerProvider.java +++ b/tw-tkms-starter/src/main/java/com/transferwise/kafka/tkms/config/TkmsKafkaProducerProvider.java @@ -3,6 +3,7 @@ import com.transferwise.common.gracefulshutdown.GracefulShutdownStrategy; import com.transferwise.kafka.tkms.api.TkmsShardPartition; import com.transferwise.kafka.tkms.config.TkmsProperties.ShardProperties; +import io.micrometer.core.instrument.ImmutableTag; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.kafka.KafkaClientMetrics; import java.time.Duration; @@ -66,9 +67,10 @@ public Producer getKafkaProducer(TkmsShardPartition shardPartiti configs.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, "5000"); configs.put(ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG, "5000"); configs.put(ProducerConfig.DELIVERY_TIMEOUT_MS_CONFIG, "10000"); - configs.put(ProducerConfig.CLIENT_ID_CONFIG, - "tw-tkms-" + shardPartition.getShard() + "-" + shardPartition.getPartition() + "-" + useCase.name().toLowerCase() - + "-" + sequence.incrementAndGet()); + + final var clientId = "tw-tkms-" + shardPartition.getShard() + "-" + shardPartition.getPartition() + "-" + useCase.name().toLowerCase() + + "-" + sequence.incrementAndGet(); + configs.put(ProducerConfig.CLIENT_ID_CONFIG, clientId); if (useCase == UseCase.PROXY) { // We use large lingering time, because we are calling the `.flush()` anyway. @@ -92,7 +94,9 @@ public Producer getKafkaProducer(TkmsShardPartition shardPartiti } final var producer = getKafkaProducer(configs); - final var kafkaClientMetrics = new KafkaClientMetrics(producer); + // Spring id is added to be compatible with Spring Boot Actuator's Kafka metrics, which from 3.4 onwards include the spring.id tag. Without + // warnings may be generated on service startup, about registering meters with different sets of tag keys + final var kafkaClientMetrics = new KafkaClientMetrics(producer, List.of(new ImmutableTag("spring.id", clientId))); kafkaClientMetrics.bindTo(meterRegistry); return new ProducerEntry().setProducer(producer).setKafkaClientMetric(kafkaClientMetrics);