Zookeeper est-il un must pour Kafka?

136

Dans Kafka, je voudrais utiliser un seul courtier, un seul sujet et une seule partition ayant un producteur et plusieurs consommateurs (chaque consommateur obtenant sa propre copie des données du courtier). Compte tenu de cela, je ne veux pas les frais généraux liés à l'utilisation de Zookeeper; Puis-je ne pas utiliser uniquement le courtier? Pourquoi un gardien de zoo est-il indispensable?

Paaji
la source
12
L'un des plus grands objectifs de conception de Kafka est le déploiement de cluster. C'est le problème qu'ils résolvent, et il serait ridicule de créer une version sans zk pour un serveur autonome. J'ai le sentiment que kafka n'est pas l'outil pour votre travail, mais que vous feriez mieux d'utiliser simplement un fichier vanilla ..
RickyA
5
J'aimerais vraiment savoir ce que vous avez finalisé? Puisque vous n'avez choisi aucune des réponses, je suppose que vous aviez votre propre solution pour cela. Merci !
Karthikeyan
Jocko est une implémentation golang de Kafka sans dépendance de gardien de zoo et installation binaire unique
Arun Gopalpuri
1
Zookeeper a été supprimé, voir la réponse ci-dessous - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi
1
juste pour ajouter, si vous lisez ce que fait le gardien de zoo, vous aurez l'idée -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller

Réponses:

128

Oui, Zookeeper est requis pour exécuter Kafka. À partir de la documentation de mise en route de Kafka:

Étape 2: Démarrez le serveur

Kafka utilise zookeeper, vous devez donc d'abord démarrer un serveur zookeeper si vous n'en avez pas déjà un. Vous pouvez utiliser le script de commodité fourni avec kafka pour obtenir une instance de gardien de zoo à nœud unique rapide et sale.

Quant à savoir pourquoi, les gens ont découvert il y a longtemps que vous devez avoir un moyen de coordonner les tâches, la gestion des états, la configuration, etc. sur un système distribué. Certains projets ont construit leurs propres mécanismes (pensez au serveur de configuration dans un cluster fragmenté MongoDB, ou à un nœud maître dans un cluster Elasticsearch). D'autres ont choisi de tirer parti de Zookeeper en tant que système de coordination de processus distribué à usage général. Ainsi, Kafka, Storm, HBase, SolrCloud, pour n'en nommer que quelques-uns, utilisent tous Zookeeper pour aider à gérer et à coordonner.

Kafka est un système distribué et est conçu pour utiliser Zookeeper. Le fait que vous n'utilisiez aucune des fonctionnalités distribuées de Kafka ne change pas la façon dont il a été construit. Dans tous les cas, l'utilisation de Zookeeper ne devrait pas entraîner de frais généraux. Une question plus importante est de savoir pourquoi vous utiliseriez ce modèle de conception particulier - une implémentation de courtier unique de Kafka manque toutes les fonctionnalités de fiabilité d'un cluster multi-courtiers ainsi que sa capacité à évoluer.

John Petrone
la source
9
En fait, kafka a été conçu de manière à ce que même avec un seul courtier, il soit toujours en mode distribué, mais avec un facteur de réplication de 1 - il n'y aura pas de mécanisme de raccourci ou de mode spécial (et c'est bien, en fait).
om-nom-nom
2
Kafka 0.8.1 nécessite zk. Et je me demande, s'il n'y a pas de couche abstraite dans Kafka pour travailler avec un système de coordination, comment un autre système de coordination peut-il être activé pour Kafka.
stanleyxu2005
Mise à jour importante stackoverflow.com/a/57328140/3438570
theodosis
64

Comme expliqué par d'autres, Kafka (même dans la version la plus récente) ne fonctionnera pas sans Zookeeper.

Kafka utilise Zookeeper pour ce qui suit:

Élire un contrôleur . Le contrôleur est l'un des courtiers et est responsable du maintien de la relation leader / suiveur pour toutes les partitions. Lorsqu'un nœud s'arrête, c'est le contrôleur qui dit aux autres réplicas de devenir des chefs de partition pour remplacer les chefs de partition sur le nœud qui disparaît. Zookeeper est utilisé pour élire un contrôleur, assurez-vous qu'il n'y en a qu'un et en élire un nouveau s'il plante.

Appartenance au cluster - quels courtiers sont vivants et font partie du cluster? ceci est également géré via ZooKeeper.

Configuration des sujets - quels sujets existent, combien de partitions chacun possède, où se trouvent les répliques, qui est le leader préféré, quelles sont les remplacements de configuration définis pour chaque sujet

(0.9.0) - Quotas - combien de données chaque client est-il autorisé à lire et à écrire

(0.9.0) - ACL - qui est autorisé à lire et à écrire dans quel sujet (ancien consommateur de haut niveau) - Quels groupes de consommateurs existent, qui sont leurs membres et quel est le dernier décalage obtenu par chaque groupe pour chaque partition.

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

En ce qui concerne votre scénario, une seule instance de courtier et un producteur avec plusieurs consommateurs, vous pouvez utiliser le poussoir pour créer un canal et pousser l'événement vers ce canal auquel le consommateur peut s'abonner et transmettre ces événements. https://pusher.com/

Kevin Li
la source
3
Souhaitez-vous modifier "la version la plus récente" dans la version actuelle. Rend votre âge de réponse meilleur.
akauppi
6
vous avez copié la réponse de quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer
Junchen Liu
J'ajoute la référence, le dernier paragraphe est à l'origine de moi.
Kevin Li
47

Mise à jour importante - août 2019:

La dépendance ZooKeeper sera supprimée d'Apache Kafka . Consultez la discussion de haut niveau dans KIP-500 : Remplacez ZooKeeper par un quorum de métadonnées auto-géré .

Ces efforts nécessiteront quelques versions de Kafka et des KIP supplémentaires. Les contrôleurs Kafka prendront en charge les tâches des tâches ZooKeeper actuelles. Les contrôleurs tireront parti des avantages du journal des événements, qui est un concept fondamental de Kafka.

Certains avantages de la nouvelle architecture Kafka sont une architecture plus simple, une facilité d'opérations et une meilleure évolutivité (par exemple, autoriser des «partitions illimitées».

Kai Wähner
la source
17

Mis à jour le juil.2020

Pour la dernière version (2.5.0), ZooKeeper est toujours requis pour exécuter Kafka, mais dans un proche avenir, ZooKeeper sera remplacé par un quorum de métadonnées auto-géré .

Voir les détails dans le KIP-500 accepté .

Alexandre Iskuskov
la source
11

Kafka est conçu pour utiliser Zookeeper. Il n'y a pas d'échappatoire à cela.

Kafka est un système distribué et utilise Zookeeper pour suivre l'état des nœuds de cluster kafka. Il garde également une trace des sujets Kafka, des partitions, etc.

En regardant votre question, il semble que vous n'avez pas besoin de Kafka. Vous pouvez utiliser n'importe quelle application prenant en charge pub-sub comme Redis , Rabbit MQ ou des solutions hébergées telles que Pub-nub .

La déroute de Santosh
la source
9

IMHO Zookeeper n'est pas une surcharge, mais vous facilite la vie.

Il est essentiellement utilisé pour maintenir la coordination entre les différents nœuds d'un cluster. L'une des choses les plus importantes pour Kafka est qu'il utilise zookeeper pour valider périodiquement des offsets afin qu'en cas de défaillance du nœud, il puisse reprendre à partir du décalage précédemment engagé (imaginez-vous en train de prendre soin de tout cela par vous-même).

Zookeeper joue également un rôle essentiel pour servir de nombreux autres objectifs, tels que la détection de leader, la gestion de la configuration, la synchronisation, la détection du moment où un nouveau nœud rejoint ou quitte le cluster, etc.

Les futures versions de Kafka prévoient de supprimer la dépendance de gardien de zoo, mais à partir de maintenant, elle en fait partie intégrante.

Voici quelques lignes tirées de leur page FAQ:

Une fois que le quorum de Zookeeper est en panne, les courtiers peuvent entraîner un mauvais état et ne peuvent normalement pas répondre aux demandes des clients, etc. ils ne peuvent pas et un kill-and-recovery dur est nécessaire pour le ramener à la normale. Par conséquent, il est recommandé de surveiller de près votre cluster zookeeper et de le provisionner pour qu'il soit performant.

Pour plus de détails, cliquez ici

utilisateur2720864
la source
13
Zookeeper est un gros mal de tête. Dans HBase. À Kafka. Dans Storm. Il y a des bogues de longue date que je connais dans Kafka / ZK qui ont poussé mon équipe à l'abandonner au profit de RabbitMQ. L'installation de HBase prend du temps pour traiter les problèmes de ZK. Cependant, votre réponse concernant l'OP est correcte: ZK est requis.
javadba
2
Certes, il y a des problèmes de compatibilité de bogues et de versions (au moins avec Kafka et ZK), mais l'intention principale de zookeeper est de gérer ces tâches complexes requises pour tout système distribué.Je suis d'accord que la gestion et le réglage de votre cluster zk nécessitent un certain effort et dépendent fortement sur zk pourrait ne pas être un choix judicieux. C'est probablement pourquoi kafka essaie de réduire les dépendances zk dans les versions ultérieures. Sur une note différente, je pense que RabitMQ et Kafka ont des philosophies de conception très différentes et visent à résoudre différents cas d'utilisation, mais cela dépasse le cadre de cette discussion :)
user2720864
Oui, kafka est supérieur pour les scénarios de charge élevée. Nous avons décidé de faire RabbitMQ jusqu'à / à moins que nous ayons clairement besoin de ces avantages. La programmation dans RabbitMQ était également plus facile: il y avait des dépendances de version scala difficiles pour Kafka.
javadba
4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> pas du point de vue d'un sysop. Zk est un morceau de vieux java rétrograde. Il a par exemple un long bogue en suspens en ce qu'il n'adhère pas au ttl d'une entrée DNS et ne résoudra donc pas une entrée. Hors de la fenêtre, vos possibilités d'échange de serveur. Je l'échangerais volontiers contre etcd.
RickyA
"Nous avons décidé de faire RabbitMQ jusqu'à / à moins que nous ayons clairement besoin de ces avantages". J'aimerais que mon équipe soit éclairée comme ça. À mon humble avis, nous n'avons clairement pas une charge assez élevée pour justifier Kafka, mais nous utilisons quand même Kafka :(
Mr Smith
4

Zookeeper est un système de centralisation et de gestion pour tout type de systèmes distribués. Le système distribué est constitué de différents modules logiciels s'exécutant sur différents nœuds / clusters (peut-être sur des emplacements géographiquement éloignés) mais fonctionnant comme un seul système. Zookeeper facilite la communication entre les nœuds, partage les configurations entre les nœuds, il garde la trace de quel nœud est le leader, quel nœud rejoint / quitte, etc. Zookeeper est celui qui garde les systèmes distribués sains et maintient la cohérence. Zookeeper est essentiellement une plateforme d'orchestration.

Kafka est un système distribué . Et par conséquent, il a besoin d'une sorte d'orchestration pour ses nœuds qui peuvent être géographiquement distants (ou non).

Shree
la source
3

Oui, Zookeeper est incontournable pour Kafka. Parce que Zookeeper a la responsabilité d'une sorte de gestion du cluster Kafka. Il contient la liste de tous les courtiers Kafka. Il avertit Kafka, si un courtier tombe en panne, ou une partition tombe en panne ou un nouveau courtier est actif ou la partition est active. En bref, ZK tient chaque courtier Kafka informé de l'état actuel du cluster Kafka.

Ensuite, chaque client Kafka (producteur / consommateur) doit simplement se connecter avec un courtier unique et ce courtier a toutes les métadonnées mises à jour par Zookeeper, de sorte que le client n'a pas à se soucier des maux de tête de découverte de courtier.

CPATIL9767
la source
3

Outre le transfert de messages de charge utile habituel, il existe de nombreuses autres communications qui se produisent dans kafka, comme

  • Événements liés aux courtiers demandant l'adhésion au cluster.
  • Événements liés à la disponibilité des courtiers.
  • Obtenir les configurations de configuration d'amorçage.
  • Événements liés aux mises à jour du contrôleur et du leader.
  • Aidez les mises à jour de l'état comme les mises à jour Heartbeat.

Zookeeper lui-même est un système distribué composé de plusieurs nœuds dans un ensemble. Zookeeper est un service centralisé pour maintenir ces métadonnées.

Amulya Holla
la source
1

Cet article explique le rôle du gardien de zoo dans Kafka. Il explique comment kafka est sans état et comment zookeper joue un rôle important dans la nature distribuée de kafka (et de nombreux autres systèmes distribués).

J. P
la source
1

La demande d'exécuter Kafka sans Zookeeper semble être assez courante. La bibliothèque Charlatan répond à cela.

Selon la description, Charlatan est plus ou moins une simulation pour Zookeeper, fournissant les services Zookeeper soit sauvegardés par d'autres outils, soit par une base de données.

J'ai rencontré cette bibliothèque en traitant du produit principal des auteurs pour la bibliothèque Charlatan; là ça marche bien…

tquadrat
la source
0

d'abord

Apache ZooKeeper est un magasin distribué qui est utilisé pour fournir des services de configuration et de synchronisation d'une manière hautement disponible. Dans les versions plus récentes de Kafka, un travail a été effectué pour que les clients clients ne stockent pas d'informations sur la mesure dans laquelle ils avaient consommé des messages (appelés décalages) dans ZooKeeper .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Alors que Kafka offre la tolérance aux pannes et la résilience , quelque chose est nécessaire pour fournir le coordination nécessaire et ZooKeeper active cette partie du système global.

Deuxièmement

Se mettre d'accord sur l'identité du leader d'une partition est un exemple de l'application pratique de ZooKeeper au sein de l'écosystème Kafka.

Zookeeper would work if there was even a single broker. 

Ceux-ci sont tirés du livre Kafka In Action . L'image provient de ce cours

fgul
la source