使用 kafka spring boot 3 和 opentelemetry 进行分布式跟踪不起作用

Bij*_*ran 4 spring-boot spring-kafka spring-micrometer micrometer-tracing

我想尝试在 Spring Boot 3 Kafka 生产者和消费者之间进行跟踪。我按照https://spring.io/blog/2022/10/12/observability-with-spring-boot-3中的示例进行操作 ,当我在生产者和消费者之间使用resttemplate进行API调用时,会自动添加traceID,但是卡夫卡消息不携带它们。我使用了以下依赖项

 <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-otel</artifactId>
        </dependency>

        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-zipkin</artifactId>
        </dependency>
     <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>3.0.0</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

卡夫卡生产者配置

@Bean
public ProducerFactory<String, String> producerFactory() {
    Map<String, Object> configProps = new HashMap<>();
    //typical properties 
    return new DefaultKafkaProducerFactory<>(configProps);
}

@Bean
public KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> producerFactory) {
    KafkaTemplate<String, String> stringStringKafkaTemplate = new KafkaTemplate<>(producerFactory);
    stringStringKafkaTemplate.setObservationEnabled(true);//trying out with
    return stringStringKafkaTemplate;
}
Run Code Online (Sandbox Code Playgroud)

发送消息

    kafkaTemplate.send("topic-1" , "message");
Run Code Online (Sandbox Code Playgroud)

在消费者方面:

    @KafkaListener(topics = "topic-1", groupId = "group1")
    public void listenGroupFoo(String message) {
        logger.info("Received Message in group foo: " + message);
    }
Run Code Online (Sandbox Code Playgroud)

当我检查kafka消息标头时,每条消息都有traceparent标头,但我在消费者日志中没有看到traceId和spanId

Gar*_*ell 8

Spring for Apache Kafka 默认情况下不启用跟踪;看

https://docs.spring.io/spring-kafka/docs/current/reference/html/#observation

千分尺观察

从版本 3.0 开始,KafkaTemplate 和侦听器容器现在支持使用 Micrometer 进行观察。

在每个组件上设置observationEnabled以启用观察;这将禁用千分尺计时器,因为计时器现在将通过每次观察进行管理。

  • 我对文档添加了一些改进:https://github.com/spring-projects/spring-kafka/commit/29cbd0e0eb20493eca0351ad1decda55586681dd (3认同)