webentwicklung-frage-antwort-db.com.de

Warum verbinden sich Kafka-Konsumenten mit Zoookeeper, und Produzenten erhalten Metadaten von Maklern?

Warum stellen Benutzer eine Verbindung zu zookeeper her, um die Speicherorte der Partitionen abzurufen? Und Kafka-Produzenten müssen sich mit einem der Broker verbinden, um Metadaten abzurufen.

Mein Punkt ist, was genau ist Zoookeeper, wenn jeder Broker bereits alle erforderlichen Metadaten besitzt, um den Produzenten den Standort mitzuteilen, an den sie ihre Nachrichten senden sollen? Könnten die Makler diese Informationen nicht an die Verbraucher senden?

Ich kann verstehen, warum Broker über die Metadaten verfügen, und nicht jedes Mal, wenn eine neue Nachricht an sie gesendet wird, eine Verbindung zum zookeeper herzustellen. Gibt es eine Funktion, die zookeeper hat, die ich vermisse? Ich finde es schwer, einen Grund zu finden, warum der Zoowärter wirklich in einem Kafka-Cluster benötigt wird.

29
Luckl507

Zookeeper wird vor allem nur für Konsumenten auf hohem Niveau benötigt. Für SimpleConsumer ist kein zookeeper erforderlich.

Der Hauptgrund, warum ein Zookeeper für einen Konsumenten auf hohem Niveau benötigt wird, besteht darin, die verbrauchten Offsets zu verfolgen und den Lastausgleich zu handhaben.

Nun ausführlicher.

Stellen Sie sich folgendes Szenario für das Offset-Tracking vor: Sie starten einen Consumer, verbrauchen 100 Nachrichten und fahren den Consumer herunter. Wenn Sie Ihren Kunden das nächste Mal starten, möchten Sie wahrscheinlich mit Ihrem letzten verbrauchten Offset (der 100 ist) fortfahren. Das bedeutet, dass Sie den maximal verbrauchten Offset irgendwo speichern müssen. Hier setzt zookeeper an: Es speichert Offsets für jede Gruppe/jedes Thema/jede Partition. Auf diese Weise wird beim nächsten Start Ihres Verbrauchers möglicherweise die Frage gestellt: "Hey, Zookeeper, von welchem ​​Offset sollte ich anfangen zu konsumieren?". Kafka ist eigentlich darauf bedacht, Offsets nicht nur im Tierpfleger, sondern auch in anderen Speichern speichern zu können (momentan sind nur zookeeper und kafka Offsetspeicher verfügbar und ich bin mir nicht sicher, ob kafka-Speicher vollständig implementiert ist).

In Bezug auf den Lastausgleich kann die Anzahl der erzeugten Nachrichten ziemlich groß sein, um von einem Computer verarbeitet zu werden, und Sie möchten wahrscheinlich irgendwann Rechenleistung hinzufügen. Nehmen wir an, Sie haben ein Thema mit 100 Partitionen, und um mit dieser Anzahl von Nachrichten umgehen zu können, haben Sie 10 Maschinen. Hier stellen sich tatsächlich einige Fragen:

  • wie sollen diese 10 Maschinen die Partitionen untereinander aufteilen?
  • was passiert, wenn eine Maschine stirbt?
  • was passiert, wenn Sie eine andere Maschine hinzufügen möchten?

Und hier setzt Zoookeeper an: Es verfolgt alle Konsumenten in der Gruppe und jeder Konsument höherer Ebene wird für Änderungen in dieser Gruppe abonniert. Der Punkt ist, dass wenn ein Verbraucher erscheint oder verschwindet, der Zookeeper alle Verbraucher benachrichtigt und eine Neuverteilung auslöst, so dass sie die Partitionen nahezu gleich aufteilen (z. B. um die Last auszugleichen). Auf diese Weise wird sichergestellt, dass ein Benutzer stirbt, während andere Partitionen weiter verarbeiten, die sich im Eigentum dieses Verbrauchers befinden.

45
serejja

Mit kafka 0.9+ wurde die neue Consumer API eingeführt. Neue Verbraucher benötigen keine Verbindung zu Zookeeper, da kafka die Gruppenbilanzierung selbst übernimmt.

10
luka1983

Sie haben recht, die Verbraucher müssen sich seit kafka 0.9 release nicht mit ZooKeeper verbinden. Sie haben die API neu gestaltet und ein neuer Consumer-Client wurde eingeführt:

die Version 0.9 führt Beta-Unterstützung für das neu gestaltete .__ ein. Verbraucher-Kunde. Auf hohem Niveau ist der Hauptunterschied in der neuen Verbraucher ist, dass es die Unterscheidung zwischen der "High-Level" entfernt ZooKeeper-basierter Consumer und die SimpleConsumer-APIs „Low-Level“ sowie bietet stattdessen eine einheitliche Consumer-API an.

und

Damit ist eine Reihe von Projekten abgeschlossen, die in den letzten Jahren durchgeführt wurden Kafka-Kunden vollständig von Zookeeper zu entkoppeln und somit .__ vollständig zu entfernen. die Abhängigkeit des Verbraucherkunden von ZooKeeper.

0
孙兴斌