2017-11-21 5 views
0

Mein Kafka Consumer hat 2 Threads und die Anzahl der Partitionen ist 10, also insgesamt 5 Partitionen pro Consumer-Thread. Ich spare die Zeit, zu der ein bestimmter Datensatz verarbeitet werden muss. Wenn nun record1 auf Partition1 in 10 Stunden ausgewählt werden soll, sollte Thread zur nächsten Partition gehen, um zu sehen, ob die nächste Partition ausgewählt werden kann.Kafka Java Consumer

Beispiel:

P1 - 8 
P2 - 7 
P3 - 6 
P4 - 5 
P5 - 4 

nun Daten auf der Partition P1 8 Stunden benötigt werden gepflückt und die aktuelle Zeit 6 Stunden, wenn ich meinen Thread mache 8 Stunden zu warten, ich 1 Stunde warten würde, obwohl Ich könnte P3, P4 und P5 verarbeiten.

Bitte lassen Sie mich wissen, wie ich fortfahren soll.

Antwort

0

Ich würde einfacher gehen: Verbraucher pro Partition haben. Es gibt KafkaConsumer.assign() API, um bestimmte Partition wirklich zu wählen und dem Verbraucher zuzuordnen. Auf diese Weise wird jeder von ihnen mit seiner eigenen isolierten Logik arbeiten, die auf dem erwähnten Plan basiert.

+0

Hallo Artem, Danke für die schnelle Antwort. Ich plane, ein paar mehr Partitionen zu haben, da ich die Verarbeitungsrate durch die Einführung eines neuen JVM-Servers erhöhen muss. – singhal

+0

Nun, es gibt keine Lösung für Sie durch die Abonnement-Funktionalität. Es gibt keine Garantie, in welcher Reihenfolge der Broker Partitionen für den Konsumenten scannt. Ich sehe einfach nicht, wie physisch wir den Verbraucher erzwingen können, mit einer bestimmten Partition umzugehen, wenn wir nur Abonnenten sind. –