首页 > 解决方案 > Project Reactor Kafka 的 Zipkin 跟踪

问题描述

我需要在一项基于 java 的服务中实现 Zipkin 跟踪,该服务使用 Project Reactor Kafka 进行反应流和非阻塞 IO 操作。我找不到任何支持响应式 Kafka 的勇敢的仪器库。

标准的 Kafka 客户端勇敢工具:

https://github.com/openzipkin/brave/tree/master/instrumentation/kafka-clients

不支持 Reactive-Kafka。

是否有库或存储库可以帮助我在 java 中使用 Zipkin 跟踪响应式 Kafka?

标签: javaapache-kafkaproject-reactorzipkinreactive-kafka

解决方案


在我的项目中,我们在发送事件之前手动生成了跨度。

var span = tracking.tracer().nextSpanWithParent(req -> true, Void.class, ctx.get(Span.class).context());

span.name("yourSpanName").start();

返回 sendEventPublisher.doOnError(span::error).doOnTerminate(span::finish);

这样,我们还将跨度链接到发布者生命周期,因为我们遇到了线程之间的 webflux 共享跨度问题。

基本上,我们创建一个 span 并将其链接到 Spring 为请求创建的父上下文(来自传入的 B3 HTTP 标头,或者如果不存在则生成)。“ctx”是这里的订阅者上下文。

这也意味着告诉侦探不要为 application.properties 中的异步操作生成跨度:

spring.sleuth.async.enabled=false


推荐阅读