ソースとシンクとしてカフカを使用するいくつかの flink ジョブがあり、それにトレースを追加して、カフカから消費/生成されたメッセージが十分にトレースされるようにします。トレース、スパン、および親の traceId。そのために、opentracing-kafka-client(v0.1.11) を brave-opentracing(v0.35.1) と組み合わせて使用しています。メッセージをログに記録する必要があるため、カスタム インターセプターを使用している理由です。指定された形式で。
インターセプターを構成した後、それらは呼び出され、上流システムからの (ヘッダーからの) トレース情報を使用してログに記録しますが、kafka へのメッセージの再生成に関しては、トレース コンテキストが失われます。たとえば、以下のシナリオを検討してください。
1) 一部の残りのサービスによって Kafka に置かれたメッセージ 2) flink ジョブとインターセプターによって消費されたメッセージが開始され、ヘッダーからのトレース情報を使用してログに記録します 3) 処理後、メッセージは flink ジョブによって Kafka に生成されます
ステップ 2 までは問題なく機能しますが、メッセージの生成に関しては、前のステップのトレース情報は使用されません。これは、ヘッダー情報がないため、まったく新しいトレースが生成されるためです。
以下のようにトレーサーを登録しています:-
public class MyTracer {
private static final Tracer INSTANCE = BraveTracer.create(Tracing.newBuilder().build());
public static void registerTracer() {
GlobalTracer.registerIfAbsent(INSTANCE);
}
public static Tracer getTracer() {
return INSTANCE;
}
}
そして、私はopentracing kafkaを使用TracingConsumerInterceptor
しています。TracingProducerInterceptor