2014-12-20 9 views
7

Wir haben eine Anwendung, die ein Verbraucher eine Nachricht liest und der Thread eine Reihe von Dingen, einschließlich Datenbankzugriffe vor einer Nachricht zu einem anderen Thema produziert. Die Zeit zwischen dem Erstellen und dem Erstellen der Nachricht im Thread kann einige Minuten dauern. Sobald die Nachricht für ein neues Thema erstellt wurde, wird ein Commit ausgeführt, um anzuzeigen, dass wir mit der Arbeit an der Consumer-Warteschlangennachricht fertig sind. Die automatische Festschreibung ist aus diesem Grund deaktiviert.kafka Consumer Sessions Zeitüberschreitung

Ich benutze die High-Level-Verbraucher und was ich bemerke, ist, dass Zookeeper und Kafka Sitzungen Timeout, weil es zu lange dauert, bevor wir etwas in Verbraucher Warteschlange tun, so kafka Enden Rebalancing jedes Mal, wenn der Thread geht zurück Lesen Sie mehr aus der Consumer-Warteschlange und es dauert sehr lange, bis ein Verbraucher nach einer Weile eine neue Nachricht liest.

Ich kann zoekeeper Session Timeout sehr hoch setzen, um das nicht zu einem Problem machen, aber dann muss ich die Rebalance-Parameter entsprechend anpassen und Kafka wird nicht einen neuen Verbraucher für eine Weile unter anderen Nebenwirkungen aufnehmen.

Was sind meine Optionen, um dieses Problem zu lösen? Gibt es eine Möglichkeit, Kafka und Tierpfleger glücklich zu machen? Habe ich noch dieselben Probleme, wenn ich einen einfachen Verbraucher verwende?

+0

Sie erhalten eher Hilfe, wenn Sie nur Ihr Problem erklären. Wenn Sie sagen, dass Sie "ein Feedback bekommen möchten", wird Ihre Frage möglicherweise geschlossen. Stack Overflow ist kein Forum; Wir legen Wert darauf, prägnant und auf den Punkt zu kommen. –

Antwort

3

Es klingt, als ob Ihre Probleme darauf hinauslaufen, sich auf den High-Level-Consumer zu verlassen, um den Last-Read-Offset zu verwalten. Die Verwendung eines einfachen Verbrauchers würde dieses Problem lösen, da Sie die Beständigkeit dieses Offsets steuern. Beachten Sie, dass der High-Level-Consumer-Commit den letzten Lese-Offset in zookeeer speichert. Es gibt keine andere Maßnahme, und die gerade gelesene Nachricht ist immer noch in der Partition vorhanden und für andere Benutzer lesbar.

Mit dem einfachen Kafka-Konsumenten haben Sie viel mehr Kontrolle darüber, wann und wie dieser Offset-Speicher stattfindet. Sie können diesen Offset auch irgendwo anders als Zookeeper (eine Datenbank zum Beispiel) beibehalten.

Die schlechte Nachricht ist, dass, während der einfache Verbraucher selbst einfacher ist als der High-Level-Verbraucher, gibt es viel mehr Arbeit, die Sie Code-weise tun müssen, damit es funktioniert. Sie müssen auch Code schreiben, um auf mehrere Partitionen zugreifen zu können - etwas, das der High-Level-Consumer ganz gut für Sie erledigt.

+0

Hallo, ich habe das gleiche Problem, aber in der neuen Kafka-Version wird der einfache Verbraucher abgeschrieben. Wie geht es jetzt? – pg20

0

Ich denke, Problem ist Consumer-Poll-Methode Trigger Consumer-Heartbeat-Anfrage. Und wenn Sie session.timeout erhöhen. Der Herzschlag des Kunden wird den Koordinator nicht erreichen. Wegen dieses Herzschlags überspringen Koordinator Verbraucher tot. Und auch die Wiederaufnahme von Verbrauchern ist sehr langsam, insbesondere im Fall von Einzelverbrauchern.

Ich habe ein ähnliches Problem konfrontiert und zu lösen, dass ich folgende Parameter in der Verbraucher-Konfigurationseigenschaften zu ändern habe

session.timeout.ms = request.timeout.ms = mehr als Session-Timeout

Auch Sie müssen die folgende Eigenschaft in der Datei server.properties im Kafka-Broker-Knoten hinzufügen. group.max.session.timeout.ms =

Sie können den folgenden Link für weitere Details sehen. http://grokbase.com/t/kafka/users/16324waa50/session-timeout-ms-limit

Verwandte Themen