我已经分发了包含多个Go服务的应用程序。其中一些将Kafka用作数据总线。使用Jaeger,可以使用opentracing
来跟踪服务之间的调用。我在图表上绘制Kafka跨度时遇到问题,它们显示为间隙。
这就是我所能做的。 初始跨度由gRPC中间件创建。生产方:
...
kafkaMsg := kafka.Message{Key: []byte(key), Value: msgBytes}
headers:=make(map[string]string)
if span := opentracing.SpanFromContext(ctx); span != nil {
opentracing.GlobalTracer().Inject(
span.Context(),
opentracing.TextMap,
opentracing.TextMapCarrier(headers))
}
for headerKey, headerValue:=range headers{
msg.Headers = append(msg.Headers, kafka.Header{
Key: headerKey,
Value: []byte(headerValue),
})
}
// Write message to Kafka
...
消费者方面:
...
// read headers from Kafka message
headers := make(map[string]string)
for _, header := range kafkaMessage.Headers{
headers[header.Key]=string(header.Value)
}
spanContext, _ := opentracing.GlobalTracer().Extract(opentracing.TextMap, opentracing.TextMapCarrier(headers))
span := opentracing.StartSpan(
"Consumer",
opentracing.FollowsFrom(spanContext))
defer span.Finish()
...
当消息在Kafka中时,我应该如何修改它以在图形上绘制跨度?
答案 0 :(得分:0)
所以,回答我自己的问题。 Jaeger不支持跨系统跨度。每个子系统都负责自己在整个系统中的跨度。 供参考,请检查此答案https://github.com/opentracing/specification/issues/143