Ist Zookeeper ein Muss für Kafka?

133

In Kafka möchte ich nur einen einzigen Broker, ein einziges Thema und eine einzige Partition mit einem Produzenten und mehreren Konsumenten verwenden (jeder Konsument erhält seine eigene Kopie der Daten vom Broker). Vor diesem Hintergrund möchte ich nicht den Aufwand für die Verwendung von Zookeeper. Kann ich nicht nur den Broker benutzen? Warum muss ein Tierpfleger?

Paaji
quelle
12
Eines der größten Designziele von Kafka sind Clusterbereitstellungen. Das ist das Problem, das sie lösen, und es wäre dumm, eine zk-freie Version für einen eigenständigen Server zu erstellen. Ich habe das Gefühl, dass Kafka nicht das Werkzeug für Ihren Job ist, aber dass Sie besser nur eine Vanille-Datei verwenden sollten.
RickyA
5
Ich würde wirklich gerne wissen, was Sie abgeschlossen haben? Da Sie keine der Antworten gewählt haben, gehe ich davon aus, dass Sie eine eigene Lösung dafür hatten. Vielen Dank !
Karthikeyan
Jocko ist eine Golang-Implementierung von Kafka ohne Zookeeper-Abhängigkeit und einzelne binäre Installation
Arun Gopalpuri
1
Zookeeper wurde entfernt, siehe die Antwort unten - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi
1
Nur um hinzuzufügen, wenn Sie lesen, was Tierpfleger tut, werden Sie auf die Idee kommen -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
Roottraveller

Antworten:

127

Ja, Zookeeper ist erforderlich, um Kafka auszuführen. Aus der Dokumentation zu Kafka Erste Schritte:

Schritt 2: Starten Sie den Server

Kafka verwendet zookeeper, daher müssen Sie zuerst einen zookeeper-Server starten, falls Sie noch keinen haben. Sie können das mit kafka gepackte Convenience-Skript verwenden, um eine schnelle und schmutzige Zookeeper-Instanz mit einem Knoten zu erhalten.

Vor langer Zeit haben die Leute festgestellt, dass Sie eine Möglichkeit haben müssen, Aufgaben, Statusverwaltung, Konfiguration usw. in einem verteilten System zu koordinieren. Einige Projekte haben ihre eigenen Mechanismen erstellt (denken Sie an den Konfigurationsserver in einem MongoDB-Sharded-Cluster oder an einen Master-Knoten in einem Elasticsearch-Cluster). Andere haben sich entschieden, Zookeeper als verteiltes Prozesskoordinierungssystem für allgemeine Zwecke zu nutzen. Kafka, Storm, HBase, SolrCloud, um nur einige zu nennen, verwenden Zookeeper, um die Verwaltung und Koordination zu erleichtern.

Kafka ist ein verteiltes System und wurde für die Verwendung von Zookeeper entwickelt. Die Tatsache, dass Sie keine der verteilten Funktionen von Kafka verwenden, ändert nichts an der Art und Weise, wie es erstellt wurde. In jedem Fall sollte die Verwendung von Zookeeper nicht viel Aufwand bedeuten. Eine größere Frage ist, warum Sie dieses spezielle Entwurfsmuster verwenden würden - bei einer einzelnen Broker-Implementierung von Kafka fehlen alle Zuverlässigkeitsmerkmale eines Multi-Broker-Clusters sowie die Skalierbarkeit.

John Petrone
quelle
9
In der Tat, kafka in eine Weise , dass auch in Sie mit einzelnen Brokern gehen wird es nach wie vor Modus verteilt, aber mit Replikationsfaktor von 1 - es wird keine Verknüpfung Mechanismen oder spezieller Modus sein (und das ist gut, tatsächlich).
om-nom-nom
2
Kafka 0.8.1 erfordert zk. Und ich frage mich, ob es in Kafka keine abstrakte Ebene für die Arbeit mit einem Koordinationssystem gibt, wie andere Koordinationssysteme für Kafka aktiviert werden können.
stanleyxu2005
64

Wie von anderen erklärt, funktioniert Kafka (auch in der neuesten Version) ohne Zookeeper nicht.

Kafka verwendet Zookeeper für Folgendes:

Controller wählen . Der Controller ist einer der Broker und für die Aufrechterhaltung der Leader / Follower-Beziehung für alle Partitionen verantwortlich. Wenn ein Knoten heruntergefahren wird, weist der Controller andere Replikate an, Partitionsleiter zu werden, um die Partitionsleiter auf dem Knoten zu ersetzen, der entfernt wird. Zookeeper wird verwendet, um einen Controller zu wählen, sicherzustellen, dass es nur einen gibt, und einen neuen zu wählen, wenn er abstürzt.

Cluster-Mitgliedschaft - Welche Broker sind am Leben und Teil des Clusters? Dies wird auch über ZooKeeper verwaltet.

Topic Konfiguration - die Themen vorhanden sind , wie viele Partitionen jeder hat, wo die Repliken sind, die der bevorzugte Leiter ist, welche Konfiguration überschreibt für jedes Thema eingestellt

(0.9.0) - Kontingente - Wie viele Daten darf jeder Client lesen und schreiben?

(0.9.0) - ACLs - Wer darf zu welchem ​​Thema lesen und schreiben (alter High-Level-Consumer) - Welche Consumer-Gruppen existieren, wer sind ihre Mitglieder und was ist der letzte Offset, den jede Gruppe von jeder Partition erhalten hat.

[von https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapira ]

In Bezug auf Ihr Szenario, nur eine Brokerinstanz und ein Produzent mit mehreren Verbrauchern, können Sie mit pusher einen Kanal erstellen und das Ereignis an den Kanal senden, den der Verbraucher abonnieren und diese Ereignisse übergeben kann. https://pusher.com/

Kevin Li
quelle
3
Möchten Sie "die neueste Version" in die aktuelle Version bearbeiten. Verbessert Ihr Antwortalter.
Akauppi
Ich füge den Verweis hinzu, der letzte Absatz stammt ursprünglich von mir.
Kevin Li
47

Wichtiges Update - August 2019:

Die ZooKeeper-Abhängigkeit wird aus Apache Kafka entfernt . Weitere Informationen finden Sie in der allgemeinen Diskussion in KIP-500 : Ersetzen Sie ZooKeeper durch ein selbstverwaltetes Metadaten-Quorum .

Diese Bemühungen erfordern einige Kafka-Veröffentlichungen und zusätzliche KIPs. Kafka Controller übernehmen die Aufgaben der aktuellen ZooKeeper-Aufgaben. Die Controller werden die Vorteile des Ereignisprotokolls nutzen, das ein Kernkonzept von Kafka darstellt.

Einige Vorteile der neuen Kafka-Architektur sind eine einfachere Architektur, einfache Bedienung und bessere Skalierbarkeit (z. B. "unbegrenzte Partitionen" zulassen.

Kai Wähner
quelle
17

Aktualisiert am Jul 2020

Für die neueste Version (2.5.0) ZooKeeper ist nach wie vor erforderlich für die Ausführung von Kafka, aber in naher Zukunft ZooKeeper wird mit einem Self-Managed Metadata Quorum ersetzt werden .

Details finden Sie im akzeptierten KIP-500 .

Iskuskov Alexander
quelle
11

Kafka wurde für die Verwendung von Zookeeper entwickelt. Dem entgeht nichts.

Kafka ist ein verteiltes System und verwendet Zookeeper, um den Status von Kafka-Clusterknoten zu verfolgen. Es verfolgt auch Kafka-Themen, Partitionen usw.

Wenn Sie Ihre Frage betrachten, scheinen Sie Kafka nicht zu brauchen. Sie können jede Anwendung verwenden, die Pub-Sub wie Redis , Rabbit MQ oder gehostete Lösungen wie Pub-Nub unterstützt .

Santosh Rout
quelle
9

IMHO Zookeeper ist kein Overhead, aber erleichtert Ihnen das Leben erheblich.

Es wird im Wesentlichen verwendet, um die Koordination zwischen verschiedenen Knoten in einem Cluster aufrechtzuerhalten. Eines der wichtigsten Dinge für Kafka ist, dass zookeeper regelmäßig Offsets festschreibt, damit bei einem Knotenausfall der zuvor festgeschriebene Offset wieder aufgenommen werden kann (stellen Sie sich vor, Sie kümmern sich selbst darum).

Zookeeper spielt auch eine wichtige Rolle für viele andere Zwecke, z. B. für die Erkennung von Führungskräften, das Konfigurationsmanagement, die Synchronisierung, die Erkennung, wann ein neuer Knoten dem Cluster beitritt oder diesen verlässt usw.

Zukünftige Kafka-Versionen planen, die Zookeeper-Abhängigkeit zu beseitigen, aber ab sofort ist sie ein wesentlicher Bestandteil davon.

Hier sind einige Zeilen aus ihrer FAQ-Seite:

Sobald das Zookeeper-Quorum nicht mehr verfügbar ist, können Broker zu einem schlechten Zustand führen und normalerweise keine Kundenanfragen usw. bearbeiten. Obwohl das Zookeeper-Quorum wiederhergestellt werden kann, sollten die Kafka-Broker in der Lage sein, automatisch in den normalen Zustand zurückzukehren, es gibt jedoch noch einige Eckfälle das können sie nicht und ein hartes Töten und Wiederherstellen ist erforderlich, um es wieder normal zu machen. Daher wird empfohlen, Ihren Zookeeper-Cluster genau zu überwachen und so bereitzustellen, dass er leistungsfähig ist.

Weitere Details finden Sie hier

user2720864
quelle
13
Zookeeper ist ein großer Kopfschmerz. In HBase. In Kafka. Im Sturm. Es gibt langjährige Fehler in Kafka / ZK, die mein Team veranlasst haben, diese zugunsten von RabbitMQ aufzugeben. Die Installation von HBase erfordert Zeit, um ZK-Probleme zu lösen. Ihre Antwort in Bezug auf das OP ist jedoch korrekt: ZK ist erforderlich.
Javadba
2
Zwar gibt es Fehler- und Versionskompatibilitätsprobleme (zumindest bei Kafka und ZK), aber die Hauptabsicht von zookeeper besteht darin, die komplexen Aufgaben zu verwalten, die für ein verteiltes System erforderlich sind. Ich stimme zu, dass die Verwaltung und Optimierung Ihres zk-Clusters einige Anstrengungen erfordert und stark davon abhängt auf zk ist vielleicht kein weiser anruf. Wahrscheinlich versucht kafka deshalb, die zk-Abhängigkeiten in späteren Versionen zu reduzieren. In einem anderen Sinne glaube ich, dass RabitMQ und Kafka eine sehr unterschiedliche Designphilosophie haben und darauf abzielen, unterschiedliche Anwendungsfälle zu lösen, aber ich denke, dass dies den Rahmen dieser Diskussion
sprengt
Ja, Kafka ist für Szenarien mit hoher Last überlegen. Wir haben uns für RabbitMQ entschieden, bis wir diese Vorteile eindeutig benötigen. Die Programmierung in RabbitMQ war ebenfalls einfacher: Es gab schwierige Abhängigkeiten der Scala-Version für Kafka.
Javadba
4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> nicht aus Sicht eines Sysops. Zk ist ein Stück alte Java-Cruft. Es hat zum Beispiel einen seit langem ausstehenden Fehler, da es sich nicht an die ttl eines DNS-Eintrags hält, sodass ein Eintrag nicht erneut aufgelöst wird. Aus dem Fenster gehen Ihre Server-Swap-Möglichkeiten. Ich würde es gerne gegen etcd eintauschen.
RickyA
"Wir haben uns für RabbitMQ entschieden, bis wir diese Vorteile eindeutig benötigen." Ich wünschte, mein Team wäre so aufgeklärt. IMHO, wir haben eindeutig nicht genug Last, um Kafka zu rechtfertigen, aber wir benutzen Kafka trotzdem :(
Mr Smith
4

Zookeeper zentralisiert und verwaltet Systeme für alle Arten von verteilten Systemen. Das verteilte System besteht aus verschiedenen Softwaremodulen, die auf verschiedenen Knoten / Clustern ausgeführt werden (möglicherweise an geografisch entfernten Standorten), jedoch als ein System ausgeführt werden. Zookeeper erleichtert die Kommunikation zwischen den Knoten, teilt Konfigurationen zwischen den Knoten, verfolgt, welcher Knoten führend ist, welcher Knoten beitritt / verlässt usw. Zookeeper ist derjenige, der verteilte Systeme gesund hält und Konsistenz gewährleistet. Zookeeper ist im Grunde eine Orchestrierungsplattform.

Kafka ist ein verteiltes System. Und daher benötigt es eine Art Orchestrierung für seine Knoten, die geografisch entfernt sein können (oder nicht).

Shree
quelle
3

Ja, Zookeeper ist ein Muss für Kafka. Weil Zookeeper die Verantwortung für die Verwaltung des Kafka-Clusters trägt. Es enthält eine Liste aller Kafka-Broker. Es benachrichtigt Kafka, wenn ein Broker ausfällt oder eine Partition ausfällt oder ein neuer Broker aktiv ist oder eine Partition aktiv ist. Kurz gesagt, ZK hält jeden Kafka-Broker über den aktuellen Status des Kafka-Clusters auf dem Laufenden.

Dann muss sich jeder Kafka-Client (Produzent / Konsument) nur mit einem einzelnen Broker verbinden, und dieser Broker verfügt über alle von Zookeeper aktualisierten Metadaten, sodass sich der Client nicht um die Probleme bei der Brokererkennung kümmern muss.

CPATIL9767
quelle
3

Abgesehen von der üblichen Übertragung von Nutzdatennachrichten gibt es viele andere Kommunikationen, die in kafka stattfinden, wie z

  • Ereignisse im Zusammenhang mit Brokern, die die Cluster-Mitgliedschaft beantragen.
  • Ereignisse im Zusammenhang mit Brokern werden verfügbar.
  • Abrufen von Bootstrap-Konfigurations-Setups.
  • Ereignisse im Zusammenhang mit Controller- und Leader-Updates.
  • Hilfestatus-Updates wie Heartbeat-Updates.

Zookeeper selbst ist ein verteiltes System, das aus mehreren Knoten in einem Ensemble besteht. Zookeeper ist ein zentraler Dienst zur Pflege solcher Metadaten.

Amulya Holla
quelle
1

Dieser Artikel erklärt die Rolle des Tierpflegers in Kafka. Es wird erklärt, wie kafka zustandslos ist und wie der Tierpfleger eine wichtige Rolle in der verteilten Natur von kafka (und vielen weiteren verteilten Systemen) spielt.

J. P.
quelle
1

Die Bitte, Kafka ohne Zookeeper zu betreiben, scheint weit verbreitet zu sein. Die Bibliothek Charlatan spricht dies an.

Laut der Beschreibung ist Charlatan mehr oder weniger ein Schein für Zookeeper, der die Zookeeper-Dienste entweder durch andere Tools oder durch eine Datenbank unterstützt.

Ich bin auf diese Bibliothek gestoßen, als ich mich mit dem Hauptprodukt der Autoren für die Charlatan-Bibliothek befasst habe. dort funktioniert es gut ...

tquadrat
quelle
0

zuerst

Apache ZooKeeper ist ein verteilter Speicher, der verwendet wird, um Konfigurations- und Synchronisierungsdienste auf hochverfügbare Weise bereitzustellen . In neueren Versionen von Kafka wurde daran gearbeitet, dass die Kundenkonsumenten keine Informationen darüber speichern, wie weit sie Nachrichten (Offsets genannt) in ZooKeeper verbraucht haben. .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Während Kafka Fehlertoleranz und Ausfallsicherheit bietet , ist etwas erforderlich, um die Koordination erforderlich und ZooKeeper ermöglicht diesen Teil des Gesamtsystems.

Zweitens

Ein Beispiel für die praktische Anwendung von ZooKeeper im Kafka-Ökosystem ist die Vereinbarung, wer der Leiter einer Partition ist.

Zookeeper would work if there was even a single broker. 

Diese stammen aus dem Buch Kafka In Action . Bild ist von diesem Kurs

fgul
quelle