OpenTracing avec Kafka Streams - Comment?

zooes:

Je suis en train d'intégrer le suivi Jaeger dans K-cours d'eau. Je comptais ajouter à tracer quelques-uns de mes plus importants pipelines et je me demandais ce qui serait une bonne façon de passer traceid d'un piepline à un autre?

Voici ce que j'ai à ce jour - Au début du pipeline de traitement de flux, je commence une période de serveur et enregistrer le traceid dans un magasin d'état. Plus tard, dans une transformation pipeline, j'accéder au statestore et capturer la trace à partir de la méthode de transformation (). Est-ce une bonne façon de gérer le traçage dans le traitement des flux?

input
  .mapValues(toSomethingThatMyAppUnderstands)      
  .mapValues(this::startStreamTrace)
  .filter((k, v) -> v.isPresent())            
  .mapValues(Optional::get)                   
  .mapValues(doSomethingHereWith)       
  .flatMapValues(doSomethingElse)       
  .filter((k, v) -> isInterestingEvent(v))    
  .transform(() -> new TransformerWithTracing<SomeObjectA, SomeObjectB>(IN_MEM_STORE_NAME, someFunction), IN_MEM_STORE_NAME)
  .flatMapValues(c -> c)
  .to(outTopic, Produced.with(Serdes.String(), new EventSerde()));



public class TransformerWithTracing<V, VR> implements Transformer<String, V, KeyValue<String, VR>> {

  final Function valueAction;
  final String storeId;
  private KeyValueStore<String, String> traceIdStore;

  public TransformerWithTracing(String storeId, Function valueAction) {
    this.storeId = storeId;
    this.valueAction = valueAction;
  }

  @Override
  public void init(ProcessorContext context) {
   // KeyValueStore store = ((KeyValueStore<String, String>) context.getStateStore(storeId));
    InMemoryKeyValueStore inMemoryKeyValueStore = (InMemoryKeyValueStore) store;
    this.traceIdStore = store;
  }

  @Override
  public KeyValue<String, VR> transform(String key, V value) {
    System.out.println(traceIdStore.get(key));

    // BuildTraceHeader 
    try(Scope scope = serviceTracer.startServerSpan(traceHeader, "Converting to Enterprise Event")) {
      return KeyValue.pair(key, (VR) valueAction.apply(value));
    }
  }

  @Override
  public KeyValue<String, VR> punctuate(long timestamp) {
    return null;
  }

  @Override
  public void close() {
//    if (streamId != null)   traceIdStore.delete(streamId);
  }

}
squeeze:

Il y a des idées similaires dans ce repo Zipkin / courageux par @jeqo.

https://github.com/jeqo/brave/tree/kafka-streams-processor/instrumentation/kafka-streams

Il semble aussi être quelque chose disponible en repo opentracing-contrib mais il semble seulement au producteur de trace / niveau des consommateurs.

https://github.com/opentracing-contrib/java-kafka-client/tree/master/opentracing-kafka-streams

  • squeeze

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=212869&siteId=1
conseillé
Classement