Dieser Beitrag hat bereits Antworten, aber ich füge meine Ansicht mit ein paar Bildern aus dem Kafka Definitive Guide hinzu
Bevor wir jede Frage beantworten, fügen wir einen Überblick über die Herstellerkomponenten hinzu:
1. Wenn ein Produzent eine Nachricht produziert - Gibt er das Thema an, an das er die Nachricht senden möchte. Ist das richtig? Interessiert es sich für Partitionen?
Der Produzent entscheidet, welche Zielpartition eine Nachricht platziert, abhängig von:
- Partitions-ID, falls in der Nachricht angegeben
- Schlüssel% num Partitionen , wenn keine Partitions-ID angegeben ist
- Round Robin, wenn weder Partitions-ID noch Nachrichtenschlüssel in der Nachricht verfügbar sind, dh nur der Wert verfügbar ist
2. Wenn ein Abonnent ausgeführt wird - Gibt er seine Gruppen-ID an, damit er Teil eines Verbraucherclusters desselben Themas oder mehrerer Themen sein kann, an denen diese Verbrauchergruppe interessiert ist?
Sie sollten group.id immer konfigurieren, es sei denn, Sie verwenden die einfache Zuweisungs-API und müssen keine Offsets in Kafka speichern. Es wird kein Teil einer Gruppe sein. Quelle
3. Hat jede Verbrauchergruppe eine entsprechende Partition auf dem Broker oder hat jeder Verbraucher eine?
In einer Verbrauchergruppe wird jede Partition nur von einem Verbraucher verarbeitet . Dies sind die möglichen Szenarien
- Die Anzahl der Konsumenten ist geringer als die Anzahl der Themenpartitionen. Dann können einem der Konsumenten in der Gruppe mehrere Partitionen zugewiesen werden
- Anzahl der Verbraucher gleicher wie Anzahl der Partitionen Thema, dann können Partition und Verbraucher - Mapping sein wie unten,
- Die Anzahl der Konsumenten ist höher als die Anzahl der Themenpartitionen. Die Partitions- und Konsumentenzuordnung kann wie folgt angezeigt werden: Nicht wirksam, überprüfen Sie Konsumenten 5
4. Da die vom Broker erstellten Partitionen daher für die Verbraucher kein Problem darstellen?
Der Verbraucher sollte sich der Anzahl der Partitionen bewusst sein , wie in Frage 3 erörtert.
5. Da es sich um eine Warteschlange mit einem Offset für jede Partition handelt, muss der Verbraucher angeben, welche Nachrichten er lesen möchte. Muss es seinen Zustand retten?
Kafka (um ein spezifischer Gruppenkoordinator zu sein ) kümmert sich um den Versatzstatus, indem eine Nachricht an ein internes __consumer_offsets- Thema gesendet wird. Dieses Verhalten kann auch manuell konfiguriert werden, indem enable.auto.commit
auf gesetzt wird false
. In diesem Fall consumer.commitSync()
und consumer.commitAsync()
kann für die Verwaltung des Offsets hilfreich sein.
Mehr zum Gruppenkoordinator :
- Es ist einer der gewählten Broker im Cluster von der Kafka-Serverseite.
- Verbraucher interagieren mit dem Gruppenkoordinator für Offset-Commits und Abrufanforderungen.
- Der Verbraucher sendet regelmäßig Herzschläge an den Gruppenkoordinator.
6. Was passiert, wenn eine Nachricht aus der Warteschlange gelöscht wird? - Zum Beispiel: Die Aufbewahrung dauerte 3 Stunden, dann vergeht die Zeit. Wie wird der Offset auf beiden Seiten gehandhabt?
Wenn ein Verbraucher nach dem Aufbewahrungszeitraum startet, werden Nachrichten gemäß der auto.offset.reset
Konfiguration konsumiert , die dies sein könnte latest/earliest
. Technisch gesehen ist es latest
(mit der Verarbeitung neuer Nachrichten beginnen), da alle Nachrichten zu diesem Zeitpunkt abgelaufen sind und die Aufbewahrung auf Konfigurationsebene erfolgt.
Nehmen wir die in Ordnung :)
Standardmäßig kümmert sich der Produzent nicht um die Partitionierung. Sie haben die Möglichkeit, einen benutzerdefinierten Partitionierer zu verwenden, um eine bessere Kontrolle zu erhalten. Dies ist jedoch völlig optional.
Ja, Verbraucher schließen sich einer Verbrauchergruppe an (oder erstellen sie, wenn sie alleine sind), um die Last zu teilen. Keine zwei Verbraucher in derselben Gruppe werden jemals dieselbe Nachricht erhalten.
Weder. Allen Verbrauchern in einer Verbrauchergruppe wird unter zwei Bedingungen eine Reihe von Partitionen zugewiesen: Keine zwei Verbraucher in derselben Gruppe haben eine gemeinsame Partition - und der Verbrauchergruppe als Ganzes wird jede vorhandene Partition zugewiesen.
Sie sind es nicht, aber Sie können aus 3 ersehen, dass es völlig nutzlos ist, mehr Konsumenten als vorhandene Partitionen zu haben. Es ist also Ihre maximale Parallelitätsstufe für den Konsum.
Ja, Verbraucher sparen einen Offset pro Thema und Partition. Dies wird komplett von Kafka erledigt, keine Sorge.
Wenn ein Verbraucher jemals einen Offset anfordert, der für eine Partition auf den Brokern nicht verfügbar ist (z. B. aufgrund eines Löschvorgangs), wechselt er in einen Fehlermodus und setzt sich für diese Partition schließlich auf die aktuellste oder älteste verfügbare Nachricht zurück (abhängig von den Konfigurationswert auto.offset.reset) und arbeiten Sie weiter.
quelle
Kafka verwendet die Themenkonzeption , um Ordnung in den Nachrichtenfluss zu bringen.
Um die Last auszugleichen, kann ein Thema in mehrere Partitionen unterteilt und über Broker hinweg repliziert werden.
Partitionen sind geordnete, unveränderliche Folgen von Nachrichten, die kontinuierlich angehängt werden, dh ein Festschreibungsprotokoll.
Nachrichten in der Partition haben eine fortlaufende ID-Nummer, die jede Nachricht in der Partition eindeutig identifiziert.
Mithilfe von Partitionen kann das Protokoll eines Themas über eine Größe hinaus skaliert werden, die auf einen einzelnen Server (einen Broker) passt und als Parallelitätseinheit fungiert.
Die Partitionen eines Themas werden über die Broker im Kafka-Cluster verteilt, wobei jeder Broker Daten und Anforderungen für eine Freigabe der Partitionen verarbeitet.
Jede Partition wird über eine konfigurierbare Anzahl von Brokern repliziert, um die Fehlertoleranz sicherzustellen.
In diesem Artikel gut erklärt: http://codeflex.co/what-is-apache-kafka/
quelle