2013-07-31 25 views
6

Wie bekomme ich genau die Bestätigung von Kafka, sobald die Nachricht verbraucht oder verarbeitet wird. Klingt vielleicht doof, aber gibt es eine Möglichkeit, den Start- und End-Offset der Nachricht zu kennen, für die die Bestätigung empfangen wurde?So erhalten Sie eine Bestätigung von Kafka

Antwort

1

Was fand ich so weit in 0,8 sie die folgende Art und Weise eingeführt haben, von dem Offset wählen zum Lesen ..

kafka.api.OffsetRequest.EarliestTime() findet den Anfang der Daten in der loggt und startet das Streaming von dort, kafka.api.OffsetRequest.LatestTime() wird nur neue Nachrichten streamen.

Beispielcode https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

noch über die Anerkennung Teil

1

Kafka nicht wirklich nicht sicher, strukturiert, dies zu tun. Um zu verstehen, warum, überprüfen Sie die Design-Dokumentation here.

Um eine genau einmalige Bestätigung bereitzustellen, müssen Sie ein externes Verfolgungssystem für Ihre Anwendung erstellen, in dem Sie ausdrücklich Bestätigungen schreiben und Sperren für die Transaktions-IDs implementieren, um sicherzustellen, dass die Daten nur einmal verarbeitet werden. Der Rechenaufwand für die Implementierung eines solchen Systems ist außerordentlich hoch und ist einer der Hauptgründe dafür, dass große transaktionale Systeme vergleichsweise exotische Hardware erfordern und eine wohl geringere Skalierbarkeit aufweisen als Systeme wie Kafka.

Wenn Sie keine starke Haltbarkeitssemantik benötigen, können Sie die Gruppen-API verwenden, um grob zu verfolgen, wann die letzte Nachricht gelesen wurde. Dadurch wird sichergestellt, dass jede Nachricht mindestens einmal gelesen wird. Beachten Sie, dass, da die Gruppen-API Ihnen nicht die Möglichkeit bietet, die Verarbeitungslogik Ihrer Anwendungen explizit nachzuverfolgen, Ihre tatsächlichen Verarbeitungsgarantien in diesem Szenario ziemlich schwach sind. Schemata, die auf idempotente Verarbeitung angewiesen sind, sind in dieser Umgebung üblich.

Alternativ können Sie die schlecht benannte SimpleConsumer-API verwenden (es ist ziemlich komplex zu verwenden), mit der Sie Zeitstempel innerhalb Ihrer Anwendung explizit verfolgen können. Dies ist die höchste Stufe der Verarbeitungsgarantie, die durch die nativen Kafka-APIs erreicht werden kann, da es Ihnen ermöglicht, Ihre eigenen Verarbeitungen der Daten, die aus der Warteschlange gelesen werden, zu verfolgen.

Verwandte Themen