Kafka ProducerListener为什么不记录跟踪ID和跨度ID?

时间:2019-10-03 20:36:19

标签: spring-cloud spring-cloud-sleuth

我有一个Kafka实例和一个带有一个REST控制器和一个ProducerListener bean的简单的Spring Boot应用程序。控制器接受简单的String消息,然后通过KafkaTemplate发送到Kafka。我希望ProducerListener记录一条信息消息,但是缺少跟踪ID和跨度ID。我认为它应该包含在日志中。

我使用Spring Cloud Sleuth和Spring Kafka启动器。

消息本身已通过Kafka主题成功发送到了另一个正确获取跟踪ID的spring boot应用程序,因此我认为问题仅与ProducerListener有关。

调试

我尝试调试代码,最终遇到方法TracingProducer.send(..)。那里的span实例是NoopSpan(这很奇怪),因此TracingCallback不会包装Callback,并且跟踪信息会丢失。有一些我不明白的讨厌的操作。罐子就是这个brave-instrumentation-kafka-clients-5.7.0.jar

代码

控制器

@PostMapping("/pass-to-kafka")
public void passToKafka(@RequestBody String message) {
   logger.info("This log message has trace id and span id");
   kafkaTemplate.send("my-test-topic", message);
}

生产者监听器

@Bean
public ProducerListener myProducerListener() {
    return new ProducerListener<>() {
        @Override
        public void onSuccess(ProducerRecord producerRecord, RecordMetadata recordMetadata) { 
            logger.info("This log message is missing trace id and span id");
        }
    };
}

带有代码的项目位于GitHub:https://github.com/vaclavnemec/kafka-sleuth-problem

我希望该信息消息写出跟踪ID和跨度ID。两个记录器中的值应该相同。

INFO [bar,208706b5c40f8e93,208706b5c40f8e93,false] com.example.demo.Controller: This log message has trace id and span id
.
.
.
INFO [bar,,,] com.example.demo.DemoApplication: This log message is missing trace id and span id

1 个答案:

答案 0 :(得分:0)

请按照文档和自述文件中的说明设置spring.sleuth.probability=1.0。然后,您将打开跟踪。