2016-08-03 4 views
1

Ich möchte Tracing in meiner Microservices-Architektur implementieren. Ich verwende Apache Kafka als Nachrichtenbroker und verwende kein Spring Framework. Tracing ist ein neues Konzept für mich. Zuerst wollte ich meine eigene Implementierung erstellen, aber jetzt möchte ich vorhandene Bibliotheken verwenden. Brave sieht aus wie die, die ich verwenden möchte. Ich würde gerne wissen, ob es Anleitungen, Beispiele oder Dokumente dazu gibt. Die Dokumentation auf der Github-Seite ist minimal und ich finde es schwierig, Brave zu verwenden. Oder vielleicht gibt es eine bessere Bibliothek mit geeigneter Dokumentation, die einfacher zu benutzen ist. Ich werde Apache HTrace betrachten, weil es vielversprechend aussieht. Einige Anfänger Guides werden nett sein.Zipkin, die vorhandene Bibliotheken verwenden, um Tracing in Microservices zu verwalten, die mit Apache Kafka verbunden sind

+0

Okay, ich habe meine Antwort bekommen. Adrian Cole hat das zu [GitHub] hinzugefügt (https://github.com/openzipkin/brave/pull/212/files) – jpiechowka

+0

warte, wie beantwortet das deine Frage ...? – EndingWithAli

Antwort

1

Es gibt eine Reihe von Möglichkeiten, dies zu beantworten, aber ich werde es aus der "one-way" Perspektive beantworten. Die kurze Antwort, ich denke, du musst dich jetzt selbst rollen!

Während Kafka auf viele Arten verwendet werden kann, kann es als Transport für unidirektionale Einzelproduzenten einzelne Verbraucher Nachrichten verwendet werden. Diese Aktion ähnelt dem normalen unidirektionalen RPC, bei dem Sie eine Anfrage, aber keine Antwort haben.

In Zipkin ist ein RPC-Bereich normalerweise Anfrage-Antwort. Beispielsweise sehen Sie das Timing des Clients, der an den Server sendet, und auch den Weg zurück zum Client. One-Way ist, wo Sie die andere Seite weglassen. Die Zeitspanne beginnt mit einem "cs" (Client senden) und endet mit einem "sr" (Server empfangen).

Wenn Sie dies Kafka zuordnen, markieren Sie den Client, der gesendet wird, wenn Sie die Nachricht und den Server empfangen, wenn der Benutzer sie empfängt.

Der Trick zu Kafka ist, dass es keinen schönen Ort gibt, um den Trace-Kontext zu stopfen. Denn im Gegensatz zu vielen Messaging-Systemen gibt es in einer Kafka-Nachricht keine Header. Ohne einen Trace-Kontext wissen Sie nicht, welche Trace (oder Bereich für diese Angelegenheit) Sie gerade vervollständigen!

Der "Hack" -Ansatz besteht darin, Trace-Identifier als Nachrichtenschlüssel zu stopfen. Ein weniger hacky Weg wäre es, einen Body Wrapper zu koordinieren, in den Sie den Trace-Kontext einbetten können.

Hier ist ein Beispiel für ersteres:

https://gist.github.com/adriancole/76d94054b77e3be338bd75424ca8ba30

0

Ich treffe das gleiche Problem too.Here meine Lösung ist, eine weniger hacky Weise wie oben gesagt.

ServerSpan serverSpan = brave.serverSpanThreadBinder().getCurrentServerSpan(); 
TraceHeader traceHeader = convert(serverSpan); 

//in kafka producer,user KafkaTemplete to send 
String wrapMsg = "wrap traceHeader with originMsg "; 
kafkaTemplate.send(topic, wrapMsg).get(10, TimeUnit.SECONDS);// use synchronization 


//then in kafka consumer 
ConsumerRecords<String, String> records = consumer.poll(5000); 
// for loop 
for (ConsumerRecord<String, String> record : records) { 
    String topic = record.topic(); 
    int partition = record.partition(); 
    long offset = record.offset(); 
    String val = record.value(); 
    //parse val to json 
    Object warpObj = JSON.parseObject(val); 
    TraceHeader traceHeader = warpObj.getTraceHeader(); 
    //then you can do something like this 
    MyRequest myRequest = new MyRequest(traceHeader, "/esb/consumer", "POST"); 

    brave.serverRequestInterceptor().handle(new HttpServerRequestAdapter(new MyHttpServerRequest(myRequest), new DefaultSpanNameProvider())); 

    //then some httprequest within brave-apache-http-interceptors 
    //http.post(url,content) 
} 

Sie müssen MyHttpServerRequest implementiert und MyRequest.It ist einfach, geben Sie einfach etwas, eine Spannweite Notwendigkeit, wie uri, header, Methode. Dies ist ein grober und hässlicher Code Beispiel, nur eine Idee anbieten.

Verwandte Themen