Kafka Consumer指标从Spring Boot 2.2.2升级到2.3.0

时间:2020-06-09 22:28:35

标签: spring-boot prometheus spring-kafka spring-cloud-stream spring-boot-actuator

问题:

我们将Spring Boot版本从2.2.2升级到了2.3.0,并且在2.2.2的Prometheus端点中看到的所有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似乎会引起问题
  • 删除了我们项目代码中所有不需要的依赖项/自定义项,并且裸露的骨头仅连接到本地主机上的kafka容器,并且度量标准仍然不出现

相关代码/详细信息:

  • 我们正在将Red Hat AMQ Streams用于我们的kafka代理(kafka版本2.1.1)
  • 我们在环境中唯一更改的是Spring Boot版本(以及自动拉入/更新的依赖项)来重新创建此问题

以下是我们更改之前的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 Boot版本更新build.gradle.kts,如下面的行所示,我们的kafka指标就会消失:

    id("org.springframework.boot") version "2.3.0.RELEASE"

以下是我们在更改前后看到的普罗米修斯指标的屏幕截图:

Before 2.3.0 upgrade

After 2.3.0 upgrade

提前感谢您的帮助!让我知道您是否需要其他详细信息!

2 个答案:

答案 0 :(得分:3)

它适用于一般的春季卡夫卡消费者

@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。问题在于该项目创建了自己的生产者/消费者工厂,并且没有添加Micrometer侦听器。

opened an issue against the binder

答案 1 :(得分:2)

类似于@jumping_monkey,我有一个使用Spring Boot 2.3.0.RELEASE的spring-kafka应用程序,并且kafka_consumer_*指标未显示在/actuator/prometheus中。当我降级到Spring Boot 2.2.7.RELEASE时,它们会显示 did

已确定使用spring-cloud-stream的应用存在问题,并且有解决此问题的计划。我的应用程序未使用spring-cloud-stream;它使用spring-kafka

解决方案是遵循spring-kafka reference上的指导,将MicrometerConsumerListener添加到消费者工厂。完成此操作后,指标将按预期显示。