You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Quarkus+OpenTelemetry实现Kafka链路追踪:无法获取TraceId

问题解决:Quarkus中Kafka消息的OpenTelemetry全链路追踪上下文传递

问题根源

你的微服务B消费方法仅接收消息负载MyData,没有处理包含W3C traceParent头部的消息元数据,导致OpenTelemetry无法自动恢复追踪上下文,进而出现Span.current().getSpanContext().getTraceId()返回全0无效值的情况。

解决方案

1. 修改消费方法,接收完整的Message对象

SmallRye Reactive Messaging会自动从Message的元数据中提取OpenTelemetry上下文并恢复,只需将消费参数改为Message<MyData>:

@Incoming("channel-in")
public void myFunction(Message<MyData> message) {
    MyData d = message.getPayload();
    // 在此方法内,Span.current()即可获取正确的traceId
    String validTraceId = Span.current().getSpanContext().getTraceId();
    // 执行你的业务逻辑(如写入MySQL)
}

2. 确认配置与依赖正确性

  • 检查application.properties中的关键配置:
    # 启用OpenTelemetry
    quarkus.opentelemetry.enabled=true
    # 设置OTLP导出端点(根据你的部署环境调整)
    quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://otel-collector:4317
    # 开启Kafka消息的追踪支持
    quarkus.smallrye-reactive-messaging.kafka.tracing-enabled=true
    
  • 确保pom.xml(Maven)中已添加必要依赖:
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-opentelemetry</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-smallrye-reactive-messaging-kafka</artifactId>
    </dependency>
    

3. 手动上下文恢复(可选,精细控制场景)

若无法接收Message对象,可手动从Kafka header中提取traceParent并恢复上下文:

@Incoming("channel-in")
public void myFunction(MyData d, @KafkaHeader("traceparent") String traceParent) {
    // 解析W3C traceParent上下文
    Context context = W3CTraceContextPropagator.getInstance()
            .extract(Context.current(), traceParent, (carrier, key) -> carrier);
    
    try (Scope scope = context.makeCurrent()) {
        // 在此作用域内使用正确的traceId
        String traceId = Span.current().getSpanContext().getTraceId();
        // 业务逻辑处理
    }
}

推荐优先使用第一种方法,SmallRye会自动处理Span的创建与上下文传递,更符合OpenTelemetry最佳实践。

验证

修改完成后,微服务B中获取的traceId应与微服务A发送时的traceId完全一致,全链路追踪的上下文将从POST请求开始,经过Kafka传递到微服务B的数据库操作环节。

内容的提问来源于stack exchange,提问作者Matteo Di Lorenzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:15:51