Pourquoi les consommateurs se connectent-ils à zookeeper pour récupérer les emplacements des partitions? Et les producteurs de kafka doivent se connecter à l'un des courtiers pour récupérer les métadonnées.
Ce que je veux dire, c’est quoi au juste l’utilisation de zookeeper alors que chaque courtier a déjà toutes les métadonnées nécessaires pour indiquer aux producteurs l’emplacement où envoyer leurs messages? Les courtiers ne pourraient-ils pas envoyer cette même information aux consommateurs?
Je peux comprendre pourquoi les courtiers disposent des métadonnées pour ne pas avoir à se connecter à un gardien de zoo chaque fois qu’un nouveau message leur est envoyé. Y a-t-il une fonction que le gardien de zoo a qui me manque? J'ai du mal à trouver une raison pour laquelle le gardien de zoo est vraiment nécessaire dans un cluster kafka.
Tout d'abord, zookeeper n'est nécessaire que pour les consommateurs de haut niveau. SimpleConsumer
n'a pas besoin de gardien de zoo pour fonctionner.
La principale raison pour laquelle zookeeper est nécessaire pour un consommateur de haut niveau est de suivre les décalages consommés et de gérer l'équilibrage de charge.
Maintenant plus en détail.
En ce qui concerne le suivi des décalages, imaginez le scénario suivant: vous démarrez un consommateur, consommez 100 messages et fermez le consommateur. La prochaine fois que vous démarrerez votre consommateur, vous voudrez probablement reprendre à partir de votre dernier offset consommé (100), ce qui signifie que vous devez stocker le décalage maximum consommé quelque part. Zookeeper entre en jeu ici: il stocke les décalages pour chaque groupe/sujet/partition. Ainsi, la prochaine fois que vous commencerez à consommer votre produit, vous vous demanderez peut-être: "Hé zookeeper, quel est le décalage que je devrais commencer à consommer?". Kafka s'oriente actuellement vers la possibilité de stocker des crédits non seulement dans le gardien de zoo, mais également dans d'autres magasins (pour l'instant, seuls les stockages zookeeper
et kafka
sont disponibles et je ne suis pas sûr que le stockage kafka
est entièrement mis en œuvre).
En ce qui concerne l'équilibrage de la charge, la quantité de messages produits peut être assez importante pour être gérée par une seule machine et vous voudrez probablement ajouter de la puissance de calcul à un moment donné. Disons que vous avez un sujet avec 100 partitions et que vous avez 10 machines pour gérer autant de messages. En réalité, plusieurs questions se posent ici:
Et encore une fois, voici où zookeeper entre en action: il suit tous les consommateurs du groupe et chaque consommateur de haut niveau est abonné aux modifications de ce groupe. Le fait est que lorsqu'un consommateur apparaît ou disparaît, le gardien de zoo avertit tous les consommateurs et déclenche un rééquilibrage afin qu'ils fractionnent les partitions de manière quasi égale (par exemple, pour équilibrer la charge). De cette façon, il garantit que si l'un des consommateurs meurt, les autres continueront à traiter les partitions appartenant à ce consommateur.
Avec kafka 0.9+, la nouvelle API consommateur a été introduite. Les nouveaux consommateurs n'ont pas besoin de connexion à Zookeeper, car l'équilibrage de groupe est fourni par kafka.
Vous avez raison, les consommateurs n'ont pas besoin de se connecter à ZooKeeper depuis kafka 0.9 release . Ils ont repensé l’API et un nouveau client consommateur a été introduit:
la version 0.9 introduit la prise en charge bêta de la nouvelle version client consommateur. À un niveau élevé, la principale différence dans le nouveau consommateur est que cela supprime la distinction entre le «haut niveau» Le consommateur basé sur ZooKeeper et les API SimpleConsumer «de bas niveau», et offre plutôt une API consommateur unifiée.
et
Enfin, ceci termine une série de projets réalisés au cours des dernières années pour découpler complètement les clients Kafka de Zookeeper, supprimant ainsi complètement la dépendance du client consommateur sur ZooKeeper.