les groups de consumer de kafka expliqués

Bonjour, c’est un codeshow.
Pendant ce temps, nous en apprendrons davantage sur les groups de consumer de kafka .
En pratique , les groups de consommateurs sont souvent utilisés plutôt que de connecter directement les consumer aux partition .
Les groups de consumer permettent une consume de partition plus automatisée que la connexion directe des consumer aux partition .
Par exemple, pour consume un topic composé de 4 partition , il faut créer 4 consumer qui regardent les partition 0 à 3.
En effet, un consumer ne peut consume qu’une seule partition .
Toutefois, si des groups de consumer sont utilisés, un consumer peut consume les quatre partition .
Et lorsque le nombre de consumer dans un même groupe augmente, la partition à consume est automatiquement rebalancing.
Contrairement aux partition consume directes, le fonctionnement présente de nombreux avantages car elles sont consume automatiquement.

Nous allons pratiquer des groups de consumer .
Le réglage de l’environnement continuera à partir de la vidéo précédente.
Exécutez devcontainers pour la pratique de kafka .
Attendez que le container s’exécute.
Lorsque le container sera prêt, nous ouvrirons docker desktop.
Exécutez le shell dans le container kafka .

Supprimons le topic créé précédemment et commençons à pratiquer.
S’il n’y a pas de topic hello , vous pouvez ignorer cette étape.

kafka-topics --bootstrap-server kafka:9092 --delete --topic hello

Supprimez un topic avec la kafka topics .

Créez un topic hello avec deux partition avec la kafka topics .

kafka-topics --bootstrap-server kafka:9092 --create --topic hello --partitions 2

Vérifiez le topic créé dans le topic de AKHQ .
J’ai confirmé qu’il y a deux partition.

consume les partition 0 et 1 avec la kafka console consumer .

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 0
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 1

Comme dans la pratique de la vidéo précédente, nous allons produce une key et une value basées sur des traits d’union.
Exécutez le producer de console kafka .

kafka-console-producer --bootstrap-server kafka:9092 --topic hello --property "key.separator=-" --property "parse.key=true"

Vous pouvez voir que deux consumer consume des messages.
Lorsqu’un consumer consume l’ option de partition, une seule partition peut être consume .
Par conséquent, les topic accumulées dans la partition du consumer précédemment arrêté ne peuvent pas être consume.

Ensuite, à partir de maintenant, nous utiliserons des groups de consumer au lieu de consume directement des partition .
Tuez le consumer de la console kafka en cours d’exécution.

Ajoute une option de groupe à une commande existante.
L’ option group spécifie id du groupe où se trouve le consumer .
Entrez id du groupe comme work.

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 0 --group work

L’exécution de la commande comme prévu entraînera une erreur.
Parce que option de partition et option de groupe ne peuvent pas être saisies en même temps.
Une seule des deux option doit être saisie.
Excluez l’ option de partition et émettez à nouveau la commande consumer de la console kafka .

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

Maintenant, nous allons vérifier le fonctionnement des groups de consumer via AKHQ .
Connectez-vous à AKHQ avec le port localhost 8080.
Consultez le menu des topics AKHQ .
Sélectionnez hello le topic dans la liste des topic .
Sélectionnez l’ onglet groups de consommateurs.
Sélectionnez les groups de consumer dont id est work .
Dans topics , vous pouvez voir des informations sur les topic et les partition actuellement consume .
Notez que les groups de consumer peuvent consume un ou plusieurs topic .
Dans cet exercice, nous consume qu’un seul topic .

Sur la AKHQ , sélectionnez l’onglet Membres.
Il y a des colonnes client id, id, host et assignments .
L’ id client est une valeur entrée pour identifier le consumer.
Dans la pratique, vous pouvez voir que ‘ console consumer ‘, la valeur par défaut de la shell , a été saisie.
L’ id client autorise les doublons.
D’autre part, la valeur de la id se voit automatiquement attribuer un id unique au sein du consumer .
Vous pouvez vérifier les informations host du consommateur via la host .
Dans la assignments , vous pouvez vérifier les partition du topic consume par le consumer .
Actuellement, il consume deux partition 0 et 1 du topic hello .
Ensuite, exécutez le consumer dont id de groupe est work dans le terminal en bas.

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

Actualisez la AKHQ .
Vous pouvez voir qu’un autre consumer de console est ajouté.
En ce qui concerne l’ id client, il existe deux consumer de console ,
Vous pouvez vérifier que les consumer ont des valeurs id uniques via la id .

Une chose à laquelle il faut prêter attention est la colonne des assignments .
Auparavant, un consumer consume les partition 0 et 1,
Puisqu’il y a maintenant deux consumer, les deux consumer consume respectivement les partition 0 et 1.

Lorsque la configuration des consumer participant à des groups de consumer est modifiée, les consumer peuvent effectuer automatiquement le rebalancing des partition .
Notez que depuis que le nombre de consumer a doublé, le débit de ces groups de consumer a également doublé.

Le rebalancing des partition alloue automatiquement le nombre de consumer divisé par la size de la partition.
Si la size de la partition est de 10 et qu’il y a deux consumer, chacun en consume 5.
Inversement, regardons le cas où la size du consommateur est supérieure à la size de la partition .
Supposons qu’il y ait 2 partition et 3 consumer, et que le consumer soit un plus grand.
Ajoutez un nouveau consumer au terminal afin qu’il y ait 3 consumer dans les groups de consumer de travail .

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

Actualisez la AKHQ .
Vous pouvez voir qu’il y a 3 client dont id de groupe est work .
Soit dit en passant, si vous vérifiez la assignments , vous pouvez voir que deux consumer se voient attribuer des partition, mais pas un consumer.
Ainsi, si le nombre de consumer dépasse le nombre de partition , les consumer restants ne se voient pas attribuer de partition.
Vous devez être prudent car vous pouvez gaspiller votre serveur inutilement.

Revenons à notre laboratoire et terminons un consumer dans le terminal .
Actualisez rapidement la AKHQ .
Vous pouvez voir qu’il n’y a pas de partition attribuées dans la assignments .
S’il y a un changement dans la composition du groupe de consumer ,
Tous les consumer arrêtent de consume des partition et attendent le rebalancing.
Et lorsque le rebalancing des partition est terminé, le consumer consume à nouveau.
Étant donné que ce processus est court, vous devez le vérifier rapidement pour le voir.

Ensuite, au lieu de consumer avec la kafka topics ,
Que se passe-t-il si vous augmentez la size de la partition du kafka ?
Les consumer restants consume -ils immédiatement la nouvelle partition ?
Je vais faire un exercice pour confirmer.
Ajouter un consumer.

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

Actualisez la AKHQ .
Vous pouvez vérifier les consumer non affectés dans la assignments .
Maintenant, augmentons le nombre de partition à 3 avec des topics kafka .

kafka-topics --bootstrap-server kafka:9092 --alter --topic hello --partitions 3

Cependant, contrairement à l’ajout ou à la suppression de consumer dans le consumer ,
Même si vous augmentez la partition avec la kafka topics , elle n’est pas immédiatement affectée au consumer.
Pour référence, dans cet exercice, il a fallu environ 2 minutes pour que la partition soit affectée au consumer .
Il peut y avoir un délai, donc si vous voulez traiter rapidement, après avoir utilisé la commande partition size alter ,
Une autre façon consiste à ajouter un consumer tout de suite.

La raison pour laquelle nous traitons le retard est due à l’ordre des topic dans kafka .
Par exemple, supposons que le topic A doive être traité avant que le topic B puisse être traité.
Cependant, A est sur la partition 0,
B est supposé être stocké sur la partition #1.
Si la partition 0 est retardée de 1 minute, B dans la partition 1 est consume en premier,
Lorsque le délai se termine et qu’un topic est consume via la partition 0,
A doit être enregistré avant B, mais B est enregistré en premier, donc une erreur se produit.
Puisque kafka garantit l’ordre par partition ,
Les topic A et B qui nécessitent de l’ordre utilisent la même key afin qu’ils puissent être stockés dans la même partition .
En tant que consumer , lorsqu’un consumer consume deux partition ou plus,
Vous devez vérifier les méta-informations dans la topic, lire les partition et traiter chaque partition séparément.
Je vais vérifier cela à travers le code dans une autre vidéo.

Enfin, intéressons-nous à la gestion des offset dans les groups de consumer .
Lors de la consume directe avec le numéro de partition existant, les informations de offset ne sont pas gérées séparément pour chaque consumer .
Cependant, les groups de consumer enregistrent les dernières informations de offset traitées par partition en fonction de id de groupe.
Ainsi, si un consumer spécifique s’arrête en raison d’une panne, une partition est immédiatement affectée à un autre consumer et la consume peut être démarrée à partir du dernier offset traité.
Exécutez deux consumer et un producer dans le terminal .

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work
kafka-console-producer --bootstrap-server kafka:9092 --topic hello --property "key.separator=-" --property "parse.key=true"

Publiez le topic en saisissant la même clé.
Vérifier qu’un consumer consume.
Tuez le consumer qui a reçu le topic .
Publiez à nouveau le topic avec la même key que le producer .
Vous pouvez voir que le consumer ne recevait pas la topic auparavant est en train de traiter la topic.
Ensuite, nous fermerons tous les consumer.
Publiez des topic avec différentes key en tant que producer .

Exécutez à nouveau le consumer en tant que consumer de console kafka .

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

Vous pouvez voir que les topic non traités sont consume.

De cette façon, si vous utilisez kafka, même si le consumer échoue, vous pouvez travailler à partir du offset une fois le traitement terminé, afin d’obtenir une cohérence éventuelle.
Avec kafka, vous pouvez obtenir un fonctionnement de service stable.

Pour référence, des informations sur les offset pour les groupes de consumer peuvent être trouvées dans la topic offsets des consommateurs .
Vous pouvez rechercher le topic sur les offsets des consommateurs en sélectionnant « show all les topics » sur la page des topics AKHQ et en le recherchant.
Si vous appuyez sur le bouton ‘ live tail ‘ au bas du topic des offsets des consumer , vous pouvez consulter les topic en temps réel.
Si vous avez id de groupe, le topic, le numéro de partition comme key dans le topic et cliquez sur la vue détaillée, vous pouvez rechercher des informations de offset .
Cela permet aux groups de consumer de rechercher le numéro de offset traité.

Ceci conclut l’explication des groups de consumer .

Définir des notifications similaires est très utile pour les créateurs de contenu.
merci