0

Angenommen, ich habe ein Thema mit 6 Partitionen und 2 Verbraucher wo P1, P2, P3 von C1 verarbeitet und P4, P5, P6 von C2 verarbeitet. Nehmen wir an, Benutzerdaten U1 gehen immer zu P1, U2 zu P2 und so weiter.Kafka: Unterstützt Kafka den Statusübergang auf Anwendungsebene?

So

C1 maintains state of users U1, U2, U3 
C2 maintains state of users U4, U5, U6. 

Nun lassen Sie uns sagen, dass wir einen weiteren Verbraucher C3 hinzufügen, so geschieht Rebalancing und jetzt

P1, P2, P3 -> C1 
P4, P5 -> C2 
P6 -> C3 

Also mein Antrag wurde Benutzer U6 Zustand in C2 beibehalten, aber jetzt U6 Daten fließt nach C3

Jetzt hier irgendwie U6 Zustand von C2 sollte nach C3 fließen. So wie dies in Kafka erreicht ist, zu wissen, dass sein sehr häufiges Problem

ODER

Wenn Kafka keine Unterstützung bieten, dann, wie dieses Problem im Allgemeinen gelöst ... Gibt es ein Design-Muster für die Lösung?

Antwort

0

Kafka wird das nicht für Sie tun - Sie werden dafür Ihre eigene Logik entwickeln müssen. Ja, das ist ein häufiges Problem, aber in gewisser Hinsicht ist das, was Sie zu tun haben, gegen Kafkas Designziele. Für einen Augenöffnen lesen Sie etwas Hintergrund über Kafkas Design here.

Lesen Sie speziell den Abschnitt "Keine Angst vor dem Dateisystem". Sie machen Ihr Problem schwieriger, indem Sie (ich nehme an, dass es komplexe) In-Memory-Datenstrukturen gibt, um den Zustand zu erhalten. Warum loggen Sie diesen Zustand nicht bei Kafka ein, und dann kann ein Verbraucher genau da weitermachen, wo ein früherer Verbraucher aufgehört hat?

Sobald Ihr Denken wird - zuerst lege ich die Daten in Kafka, dann verwende ich es in meiner Anwendung - dann bedeutet es, dass alle Ihre Kunden Zugriff auf die gleichen Daten haben. Es gibt keinen "privaten" Speichercache. Und Ihr Problem ist viel einfacher zu lösen.

+0

Danke! Scheint so, als ob du mich fragst, wie "Offsets" in Kafka durch das Thema __consumer_offsets begangen werden? –

+0

Ähnliche Lösung, ja. Ich mache es mit allem. Ein anderer Ansatz besteht darin, den Zustand nicht zu stören. Kafka ist optimiert für das Lesen langer Nachrichten. Lassen Sie den (neuen) Verbraucher seinen eigenen Zustand aufbauen, indem Sie ihn von Anfang an lesen. Sorgen Sie dafür, dass Sie das später optimieren. –

+0

Eine andere Option wäre die Verwendung von 'Zookeeper', was Kafka vor' __consumer_offsets' verwendet hat. Ich habe vor einiger Zeit eine diesbezügliche Frage gestellt, die für Sie interessant sein könnte: http://stackoverflow.com/questions/35869786/kafka-instead-of-ozookeeper-for-cluster-management –