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
Spring for Apache Kafka 默认情况下不启用跟踪;看
https://docs.spring.io/spring-kafka/docs/current/reference/html/#observation
千分尺观察
从版本 3.0 开始,KafkaTemplate 和侦听器容器现在支持使用 Micrometer 进行观察。
在每个组件上设置
observationEnabled以启用观察;这将禁用千分尺计时器,因为计时器现在将通过每次观察进行管理。
| 归档时间: |
|
| 查看次数: |
6806 次 |
| 最近记录: |