2016-04-01 5 views
1

Ich habe einen Verbraucher, der Nachrichten von einem Thema lesen soll. Dieser Konsument liest die Nachrichten tatsächlich und schreibt sie in eine Zeitreihen-Datenbank. Wir haben mehrere Instanzen der Zeitreihendatenbank, die als Cluster auf mehreren physischen Maschinen ausgeführt wird.Apache Kafka Mehrere Verbraucherinstanzen

Unser Plan ist, den Consumer auf all jenen Computern bereitzustellen, auf denen der Zeitreihendienst ausgeführt wird. Wenn ich also 5 Knoten habe, auf denen der Zeitreihendienst läuft, installiere ich eine Verbraucherinstanz pro Knoten. Alle diese Verbraucherinstanzen gehören derselben Verbrauchergruppe an. So in Bildern die Set up sieht aus wie folgt:

enter image description here

Wie Sie sehen können, die Producer P1 und P2 Schreib in 2 Partitionen nämlich Partition 1 und Partition 2 des kafkas Thema. Ich habe dann 4 Instanzen des Zeitreihendienstes, bei denen ein Verbraucher pro Instanz läuft. Wie sollte ich meinen Kunden richtig lesen, damit ich nicht in meiner Zeitreihen-Datenbank doppelte Nachrichten erhalte?

Edit: Nach dem durch die Kafka-Dokumentation zu lesen, stieß ich auf diese beiden Aussagen:

If all the consumer instances have the same consumer group, then this works just like a traditional queue balancing load over the consumers. 

If all the consumer instances have different consumer groups, then this works like publish-subscribe and all messages are broadcast to all consumers. 

So oben in meinem Fall, es wie eine Queue verhält? Ist mein Verständnis richtig?

Antwort

2

Wenn alle Consumer zu einer Gruppe gehören (haben Sie die selbe groupId), dann wird sich kafka topic für Sie als Warteschlange verhalten.

Wichtig: Es gibt keinen Grund, Konsumenten mehr als Partitionen zu haben, da die Konsumenten (Out-of-the-Box-Kafka-Konsumenten) durch Partitionen skaliert werden.

http://kafka.apache.org/images/consumer-groups.png