2016-07-06 6 views
10

Das Dokument https://www.safaribooksonline.com/library/view/kafka-the-definitive/9781491936153/ch04.html sagt, dass "Beachten Sie, dass bei aktiviertem Auto-Commit ein Call-to-Poll immer den letzten Offset der vorherigen Abfrage festschreibt. Es tut nicht Ich weiß nicht, welche Ereignisse tatsächlich verarbeitet wurden, daher ist es wichtig, immer alle von der Abfrage zurückgegebenen Ereignisse zu verarbeiten, bevor erneut poll aufgerufen wird (oder bevor clos() aufgerufen wird). ". Wenn dies der Fall ist, wie funktioniert es, wenn auto.commit.interval.ms größer ist als die Zeit, wenn die Verarbeitung der Nachrichten von vorherigen Poll() dauert.Benötigen Sie nähere Informationen zu Kafka auto commit und auto.commit.interval.ms

Um es konkreter, das Szenario, wo ich folgendes:

enable.auto.commit = true

auto.commit.interval.ms = 10

Und ich rufe Umfrage() in einer Schleife.

1) Beim ersten Aufruf von poll(), erhalte ich 1000 Meldungen (Offset 2000-3000) und es dauert 1 ms alle 1000 Meldungen

2) zu verarbeiten, wieder rufe ich poll(). Bei diesem zweiten Aufruf von poll() sollte der letzte Offset 3000, der von der vorherigen Abfrage() zurückgegeben wurde, übergeben werden, da aber auto.commit.interval.ms auf 10 ms gesetzt ist, wird der Offset noch nicht festgeschrieben, oder?

In diesem Szenario wird der Commit-Offset immer weiter hinter dem letzten Offset zurückbleiben, der tatsächlich verarbeitet wurde?

Könnte jemand klären/bestätigen?

Antwort

9

Sie beschreiben das Verhalten richtig. Ihre Schlussfolgerung ist jedoch nicht korrekt. Der festgeschriebene Offset wird nicht weiter und weiter nacheilen. Nach dem Übergeben des Intervalls für die automatische Festschreibung wird der nächste abzurufende Aufruf verarbeitete Nachrichten festschreiben.

Angenommen, Sie rufen poll alle 10 ms auf und legen das Commit-Intervall auf 100 ms fest. Somit wird in jedem 10. Call to Poll Commit ausgeführt (und dieses Commit deckt alle Nachrichten der letzten 10 Poll-Aufrufe ab).

+0

Sie haben Recht. Eventuell werden 2 Offsets (committed und nearest processed) synchronisiert, aber bis dahin wird der Committed Offset immer wieder zurückfallen. – Deeps

+0

Zwischen zwei Commits ja. Dies soll die Anzahl der Commits reduzieren, die Kafka verarbeiten muss. Daran erinnern, dass Kafka bietet mindestens einmal Liefergarantie. Daher ist es ein Kompromiss zwischen der Anzahl der Commits und der Anzahl der Daten, die im Fall eines Fehlers erneut verarbeitet werden müssen. –

+0

Was ist, wenn der Poll-Aufruf nach 100 ms erfolgt und das automatische Commit-Intervall auf 10 ms gesetzt wurde? –

Verwandte Themen