2016-03-03 10 views
5

Wir werden ein Kafka Publish Subscribe System implementieren.Wie man Kafka Cluster Fehler behandelt

Jetzt, in den schlimmsten der schlimmsten Fälle - wenn alle Kafka Broker für ein bestimmtes Thema untergehen - was passiert?

Ich habe dies ausprobiert ... der Publisher erkennt es nach dem Standard-Timeout für Metadaten fetch & löst Ausnahme aus, wenn nicht erfolgreich.

In diesem Fall können wir die Ausnahme überwachen und Publisher neu starten, nachdem Sie Kafka repariert haben.

Aber was ist mit den Verbrauchern - sie scheinen keine Ausnahmen zu bekommen, sobald Kafka untergeht. Wir können nicht "alle" Verbraucher bitten, ihre Systeme neu zu starten. Gibt es einen besseren Weg, dieses Problem zu lösen?

Antwort

2

Wenn der Verbraucher (0.9.x-Version) abfragt und der Cluster ausfällt sollte die folgende Ausnahme

java.net.ConnectException: Connection refused 
erhalten

Sie können Polling halten, bis der Cluster wieder ist es nicht notwendig, die neu zu starten Verbraucher, es wird die Verbindung wiederherstellen.

+0

Klingt wie, was ich brauche ... Kann dies in V8.2.1 getan werden? Wenn ja, wie kann dies aktiviert werden? – nikel

+0

Ich nahm an, dass, da es ein neues System war, Sie den neuesten Verbraucher verwenden, es tut mir leid, aber ich kenne den alten Verbraucher nicht. – Nautilus

4

Aber was ist mit den Verbrauchern - sie scheinen keine Ausnahmen zu bekommen sobald Kafka untergeht. Wir können einfach nicht "alle" Verbraucher dazu auffordern, ihre Systeme neu zu starten. Gibt es einen besseren Weg, dieses Problem zu lösen?

Ja, Verbraucher wird keine Ausnahmen erhalten und das Verhalten ist wie geplant. Sie müssen jedoch nicht alle Benutzer neu starten, stellen Sie in Ihrer Logik sicher, dass der Consumer den Methodenaufruf poll() regelmäßig aufruft. Der Verbraucher ist so konzipiert, dass er selbst dann nicht beeinträchtigt wird, wenn kein Cluster mehr vorhanden ist. Beachten Sie die folgenden Schritte, um zu verstehen, was tatsächlich passiert:

1: Alle Cluster sind inaktiv, es gibt keinen aktiven Cluster.

2: consumer.poll(timeout) // This will be called form you portion of code

3: Inside poll() Methodenaufruf in KafkaConsumer.java, die Anrufen folgende Reihenfolge stattfinden.

Ich habe die wichtigsten Methodenaufrufe markiert, die nach dem Ausführen logischer Prüfungen intern aufgerufen werden. An diesem Punkt wird Ihr Kunde warten, bis der Cluster wieder aktiv ist.

4: Cluster wieder nach oben oder

5 neu gestartet: Verbraucher werden benachrichtigt und es beginnt wieder zu arbeiten, wie sie normalerweise war es, bevor der Cluster untergeht.

Hinweis: - Der Consumer empfängt Nachrichten vom letzten Offset-Commit, die empfangene Nachricht wird nicht dupliziert.

Das beschriebene Verhalten gilt für (0.9.x-Version)