Kafka 消费者指标从 Spring Boot 2.2.2 升级到 2.3.0
Kafka Consumer metrics gone upon upgrade from Spring Boot 2.2.2 to 2.3.0
问题:
我们将 Spring 引导版本从 2.2.2 升级到 2.3.0,并且在 2.2.2 的普罗米修斯端点中看到的所有 kafka_consumer_*
指标在 2.3 中都不可见.0.
例如,缺少以下所有内容:
kafka_consumer_records_consumed_total_records_total
kafka_consumer_records_lag_records
kafka_consumer_fetch_latency_max_seconds
kafka_consumer_bytes_consumed_total_bytes_total
不确定我们是否遗漏了某种配置或隐藏在文档中的内容...
尝试过的:
- 梳理了 Spring Boot 2.3.0 发行说明,更新了千分尺文档,并更新了 spring-kafka 文档以了解为什么会发生这种情况
- 用谷歌搜索到感觉像是天涯海角的地方
- 尝试升级到 Spring Boot 2.2.7,kafka 指标仍然存在,似乎只有升级到 2.3.0 才会导致问题
- 删除了我们项目代码中的任何不需要的 dependency/customization,并且只连接到本地主机上的 kafka 容器,指标仍然没有出现
相关code/details:
- 我们正在为我们的 kafka 代理(kafka 版本 2.1.1)使用 Red Hat AMQ Streams
- 我们在环境中唯一改变的是 Spring 引导版本(以及自动提取的依赖项 in/updated)以重现此问题
下面是我们build.gradle.kts
改动前的:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.2.2.RELEASE"
id("io.spring.dependency-management") version "1.0.9.RELEASE"
kotlin("jvm") version "1.3.72"
kotlin("plugin.spring") version "1.3.72"
}
group = "ourGroup"
version = "0.0.1"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
extra["springCloudVersion"] = "Hoxton.RELEASE"
dependencyManagement {
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
}
}
dependencies {
implementation("org.springframework.cloud:spring-cloud-starter-stream-kafka")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("io.micrometer:micrometer-registry-prometheus")
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
}
testImplementation("io.projectreactor:reactor-test")
testImplementation("org.springframework.security:spring-security-test")
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
现在,如果我们只是用新的 spring 引导版本更新我们的 build.gradle.kts
,如下一行所示,我们的 kafka 指标就会消失:
id("org.springframework.boot") version "2.3.0.RELEASE"
以下是我们在更改前后看到的普罗米修斯指标的屏幕截图:
Before 2.3.0 upgrade
After 2.3.0 upgrade
在此先感谢您的帮助!如果您需要任何其他详细信息,请告诉我!
它适用于普通的 spring-kafka 消费者
@SpringBootApplication
public class So62292889Application {
public static void main(String[] args) {
SpringApplication.run(So62292889Application.class, args);
}
@KafkaListener(id = "so62292889", topics = "so62292889")
public void listen(String in) {
System.out.println(in);
}
@Bean
public NewTopic topic() {
return TopicBuilder.name("so62292889").partitions(1).replicas(1).build();
}
@Bean
public ApplicationRunner runner(MeterRegistry registry) {
return args -> {
registry.getMeters().forEach(meter -> System.out.println(meter.getId()));
};
}
}
MeterId{name='kafka.consumer.outgoing.byte.total'...
我看到您正在使用 spring-cloud-stream。问题是这个项目创建了自己的 producer/consumer 工厂并且没有添加 Micrometer 侦听器。
类似于@jumping_monkey,我有一个使用 Spring Boot 2.3.0.RELEASE 的 spring-kafka
应用程序,但未显示 kafka_consumer_*
指标在 /actuator/prometheus
。当我降级到 Spring Boot 2.2.7.RELEASE.
时,它们 出现了
已确定使用 spring-cloud-stream
的应用程序存在问题,并计划解决该问题。但是,我的应用程序不使用 spring-cloud-stream
;它使用 spring-kafka
.
解决方案是按照 spring-kafka reference 上的指导向消费者工厂添加 MicrometerConsumerListener
。执行此操作后,指标会按预期显示。
问题:
我们将 Spring 引导版本从 2.2.2 升级到 2.3.0,并且在 2.2.2 的普罗米修斯端点中看到的所有 kafka_consumer_*
指标在 2.3 中都不可见.0.
例如,缺少以下所有内容:
kafka_consumer_records_consumed_total_records_total
kafka_consumer_records_lag_records
kafka_consumer_fetch_latency_max_seconds
kafka_consumer_bytes_consumed_total_bytes_total
不确定我们是否遗漏了某种配置或隐藏在文档中的内容...
尝试过的:
- 梳理了 Spring Boot 2.3.0 发行说明,更新了千分尺文档,并更新了 spring-kafka 文档以了解为什么会发生这种情况
- 用谷歌搜索到感觉像是天涯海角的地方
- 尝试升级到 Spring Boot 2.2.7,kafka 指标仍然存在,似乎只有升级到 2.3.0 才会导致问题
- 删除了我们项目代码中的任何不需要的 dependency/customization,并且只连接到本地主机上的 kafka 容器,指标仍然没有出现
相关code/details:
- 我们正在为我们的 kafka 代理(kafka 版本 2.1.1)使用 Red Hat AMQ Streams
- 我们在环境中唯一改变的是 Spring 引导版本(以及自动提取的依赖项 in/updated)以重现此问题
下面是我们build.gradle.kts
改动前的:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.2.2.RELEASE"
id("io.spring.dependency-management") version "1.0.9.RELEASE"
kotlin("jvm") version "1.3.72"
kotlin("plugin.spring") version "1.3.72"
}
group = "ourGroup"
version = "0.0.1"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
extra["springCloudVersion"] = "Hoxton.RELEASE"
dependencyManagement {
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
}
}
dependencies {
implementation("org.springframework.cloud:spring-cloud-starter-stream-kafka")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("io.micrometer:micrometer-registry-prometheus")
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
}
testImplementation("io.projectreactor:reactor-test")
testImplementation("org.springframework.security:spring-security-test")
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
现在,如果我们只是用新的 spring 引导版本更新我们的 build.gradle.kts
,如下一行所示,我们的 kafka 指标就会消失:
id("org.springframework.boot") version "2.3.0.RELEASE"
以下是我们在更改前后看到的普罗米修斯指标的屏幕截图:
Before 2.3.0 upgrade
After 2.3.0 upgrade
在此先感谢您的帮助!如果您需要任何其他详细信息,请告诉我!
它适用于普通的 spring-kafka 消费者
@SpringBootApplication
public class So62292889Application {
public static void main(String[] args) {
SpringApplication.run(So62292889Application.class, args);
}
@KafkaListener(id = "so62292889", topics = "so62292889")
public void listen(String in) {
System.out.println(in);
}
@Bean
public NewTopic topic() {
return TopicBuilder.name("so62292889").partitions(1).replicas(1).build();
}
@Bean
public ApplicationRunner runner(MeterRegistry registry) {
return args -> {
registry.getMeters().forEach(meter -> System.out.println(meter.getId()));
};
}
}
MeterId{name='kafka.consumer.outgoing.byte.total'...
我看到您正在使用 spring-cloud-stream。问题是这个项目创建了自己的 producer/consumer 工厂并且没有添加 Micrometer 侦听器。
类似于@jumping_monkey,我有一个使用 Spring Boot 2.3.0.RELEASE 的 spring-kafka
应用程序,但未显示 kafka_consumer_*
指标在 /actuator/prometheus
。当我降级到 Spring Boot 2.2.7.RELEASE.
已确定使用 spring-cloud-stream
的应用程序存在问题,并计划解决该问题。但是,我的应用程序不使用 spring-cloud-stream
;它使用 spring-kafka
.
解决方案是按照 spring-kafka reference 上的指导向消费者工厂添加 MicrometerConsumerListener
。执行此操作后,指标会按预期显示。