使用zipkin + kafka时,Spring云流消息的空洞检测会丢失

时间:2018-06-11 10:52:31

标签: spring-cloud-stream spring-kafka zipkin spring-cloud-sleuth

我有以下设置:

  • 几个Spring Cloud Edgware服务,最明显的是spring-cloud-starter-zipkinspring-cloud-stream-binder-kafka依赖项。
  • 运行openzipkin/zipkin:2.8泊坞窗图片
  • 的Zipkin服务器
  • 我看到服务进入" zipkin"主题,zipkin选择那些痕迹,我可以在zipkin ui中查看它们。
  • 一见钟情似乎一切正常,特别是对于我的服务之间的休息呼叫,但我只是看到它不能用于我自己的消息,我用于我的服务之间的异步通信(我使用spring cloud stream for这一点)。
  • 我可以看到来自TraceChannelInterceptor的日志消息,表明正在进行检测
  • 但是当我检查kafka中的数据时,消息中不存在跟踪消息头。

当我过去包含spring-cloud-sleuth-stream dependendy时,曾经有一个StreamEnvironmentPostProcessor完成了将跟踪标头添加到kafka绑定的工作。 But the doc clearly states now

  

注意:不推荐使用spring-cloud-sleuth-stream并且与这些目标不兼容

我该怎么做才能使这项工作正常进行?自己将标题添加到绑定配置?或者我有什么遗失的东西?

1 个答案:

答案 0 :(得分:1)

这是Edgware中的Spring Cloud Sleuth中的一个错误。 Edgware中的Stream Kafka Binder需要显式传递应该传播的标头。在类路径上添加sleuth-stream的副作用正是该功能。通过修复https://github.com/spring-cloud/spring-cloud-sleuth/issues/1005问题,我们将缺少的功能添加回核心。由于Finchley的Stream Kafka Binder默认传递所有标题,因此不会移植到Finchley。

Edgware的解决方法是以下列方式传递标题列表:

spring:
  cloud:
    stream:
      kafka:
        binder:
          headers:
            - spanId
            - spanSampled
            - spanProcessId
            - spanParentSpanId
            - spanTraceId
            - spanName
            - messageSent