2016-02-22 9 views
10

wir planen, einen kafka Verbraucher (Java) zu schreiben, die kafka Warteschlange liest, um eine Aktion auszuführen, die in der Nachricht ist.können mehrere kafka Verbraucher lesen die gleiche Nachricht in der Partition

Da die Verbraucher unabhängig voneinander arbeiten, wird die Nachricht nur von jeweils einem Verbraucher verarbeitet. Dies bedeutet, dass alle Verbraucher die gleiche Nachricht verarbeiten, da sie einen eigenen Offset in der Partition haben.

bitte helfen Sie mir zu verstehen.

+0

sieht aus wie kafka hat keine Warteschlangen. es hat nur Themen – gstackoverflow

Antwort

28

Es hängt von Group ID ab. Angenommen, Sie haben ein Thema mit 12 Partitionen. Wenn Sie zwei Kafka-Konsumenten mit derselben Gruppen-ID haben, lesen sie beide 6 Partitionen, was bedeutet, dass sie unterschiedliche Partitionen = unterschiedliche Nachrichten lesen. Wenn Sie 4 Kafka-Cosnumers mit der gleichen Gruppen-ID haben, werden alle drei verschiedene Partitionen usw. lesen.

Wenn Sie jedoch eine andere Gruppen-ID festlegen, ändert sich die Situation. Wenn Sie zwei Kafka-Konsumenten mit unterschiedlicher Gruppen-ID haben, werden sie alle 12 Partitionen ohne gegenseitige Beeinflussung lesen. Das bedeutet, dass beide Konsumenten unabhängig voneinander den gleichen Satz von Nachrichten lesen. Wenn Sie vier Kafka-Konsumenten mit unterschiedlicher Gruppen-ID haben, werden alle alle Partitionen usw. gelesen.

+0

eigentlich möchte ich nur 3 Verbraucher haben .. (gleichen Code) läuft als Daemon-Service auf Linux-Maschinen in AWS ... um Nachrichten in der Warteschlange .. also Sie meine ich muss die gleiche groupId zuzuordnen alle 3, so dass nur ein Verbraucher die Nachricht zu einem Zeitpunkt verarbeitet ..... und wie werden die anderen Verbraucher wissen, wenn die Nachricht erfolgreich verarbeitet wird, so dass sie es nicht zur Verarbeitung abholen ... – shiv455

+0

Sie können andere nicht informieren Verbraucher, dass eine Nachricht nicht korrekt verarbeitet wurde. Wenn jedoch ein Verbraucher scheitert, wird der andere Verbraucher seinen Job annehmen. Bedeutung: Wenn Sie 12 Partitionen und 3 Consumer mit derselben Gruppen-ID haben, liest jeder Consumer 4 Partitionen. Wenn ein Verbraucher versagt, kommt [Rebalancing] (http://stackoverflow.com/questions/27181693/how-does-consumer-rebalancing-work-in-kafka) vor und jetzt lesen die beiden lebenden Konsumenten 6 Partitionen. Beachten Sie, dass Sie, wenn Sie den Offset nach jeder Nachricht nicht aktualisieren, einige Nachrichten mehr als einmal lesen können. –

+0

Entschuldigung ich denke, meine Frage ist verwirrend ... Lemme brechen es auf 1. Wenn eine Nachricht von einem Verbraucher verarbeitet wird und der Offset ist committed.now während der Verarbeitung der Nachricht, die externen Abhängigkeiten des Verbrauchers fehlgeschlagen und die Nachricht nicht verarbeitet, Verbraucher ist aktiv und running though ... wie die Nachricht erneut versucht wird, da der Offset gesetzt ist, um die nächste Nachricht vom Consumer zu lesen..2.wenn ein Konsument Nachrichten in einer bestimmten Partition verarbeitet und wenige Nachrichten verarbeiten kann und gestorben ist, Sie sagte, es wird Rebalancing und Partitionen verteilt werden, wie andere Verbraucher den Offset von gestorbenen Verbraucher wissen – shiv455

Verwandte Themen