topic kafka , description de la partition (producer, consumer , factor de replication , offset)
Bonjour, c’est un codeshow.
Pendant ce temps, nous apprendrons le topic et la partition dans kafka .
Pour utiliser kafka, vous devez avoir un topic.
Sur la base de ce topic, les producer publish des messages,
le consumer s’abonne aux messages.
Exécutez kafka pour créer un topic .
Veuillez vous référer à la vidéo précédente pour les paramètres d’environnement.
Exécutez devcontainers pour la pratique de kafka .
Attendez que le container s’exécute.
Lorsque le container aura fini de s’exécuter, nous ouvrirons docker desktop.
Exécutez le shell dans le container kafka .
Pour la recherche de topic , utilisez l’ option de liste des topics kafka .
kafka-topics --bootstrap-server kafka:9092 --list
J’ai confirmé qu’il n’y a pas de topic à l’exception des offsets de consumer de topic et des schemas créés par défaut.
Créez un topic à l’aide de l’ option create de la commande kafka topics .
kafka-topics --bootstrap-server kafka:9092 --create --topic hello --partitions 1 --replication-factor 1
J’ai créé un topic avec le nom hello avec la commande kafka topics .
Le nom du topic est spécifié à l’aide de l’ option name .
L’ option de factor de réplication est une option permettant de sélectionner le nombre de copies de données de partition à effectuer.
J’ai défini la valeur du factor de réplique autant que le nombre de nœuds kafka .
Des valeurs plus élevées entraînent le coût de la copie des partitions entre les nœuds, ce qui affecte les performances.
Au lieu de cela, si la valeur est petite, les données peuvent être perdues en cas d’échec de kafka .
Une valeur de 3 ou plus est généralement recommandée.
Pour référence, une erreur se produit si vous mettez un factor de replication supérieur au nombre de nœuds kafka au moment de la create .
kafka-topics --bootstrap-server kafka:9092 --create --topic error --partitions 1 --replication-factor 4
Je vais vous expliquer les partitions avec une autre option .
La partition est une information très importante dans kafka.
L’ option de partitions est une information qui définit le nombre de topic à diviser.
Si un producer publish 100 topic et que ce topic n’a qu’une seule partition,
100 topic sont empilés dans 1 partition.
Si un consumer prend 1 minute pour traiter 1 topic.
Il faudra 100 minutes pour traiter 100 topic .
Si vous définissez la partition sur 4, les topic sont empilés par 25 dans chacune des 4 partitions.
Puisqu’une partition peut avoir au plus un consumer,
Vous pouvez maintenant ajouter 3 consumer autant que le nombre de partitions a augmenté.
Le temps de traitement peut être réduit de 1/4 de 100 minutes à 25 minutes.
Nous allons pratiquer le contenu jusqu’à présent en utilisant le shell.
Je vais pratiquer le producer et le consumer sur le topic hello .
Exécutez le terminal dans le container kafka .
Placez le producer à gauche et le consumer à droite.
Connectez-vous à kafka à l’aide de la commande du producer de la console kafka .
kafka-console-producer --bootstrap-server kafka:9092 --topic hello
Le producer est connecté au broker kafka .
Connectez-vous à kafka à l’aide de la commande consumer de la console kafka .
La partition augmente séquentiellement à partir de l’index 0.
En pratique, puisque la size de la partition est 1, seule la partition 0 peut être utilisée.
Entrez le partition 0 comme option .
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 0
Entrez le message hello pour le producer .
Vous pouvez cocher hello dans consumer .
Alors, plusieurs consumer peuvent-ils se connecter à une partition ?
Lançons un terminal supplémentaire et ajoutons un consumer.
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 0
Le consumer se connecte sans problème.
Alors que se passe-t-il lorsque vous publish un message en tant que producer ?
Il existe deux scénarios.
- Les messages sont livrés séquentiellement, une fois dans l’ordre des consumer .
C’est ce qu’on appelle la round robin . - Tous les messages sont livrés à tous les consumer.
Le nom s’appelle broadcasting.
Entrez le message hello1 en tant que producer pour vérifier le fonctionnement.
Un message hello1 apparaît sur les deux consumer.
Saisissez à nouveau le message hello2 en tant que producer.
Un message hello2 apparaît sur les deux consumer.
Dans kafka , tous les consumer connectés à la même partition reçoivent des messages par broadcasting .
Pour référence, rabbit mq, un autre broker de message , peut connecter plusieurs worker à une queue .
Et avec le round robin, les worker reçoivent les messages de manière séquentielle.
Cette partie fonctionne différemment de kafka, de sorte que ceux qui ont d’abord expérimenté le rabbit mq peuvent être confus.
rabbit mq augmente le débit en augmentant la size des worker dans une queue ,
kafka augmente le débit en augmentant la size de la partition d’un topic .
Dans cet exercice, nous allons changer le nombre de partition.
Augmentons le nombre de partition de 1 à 2.
Quittez le producer en appuyant sur ctrl c.
Augmentons la size de la partition à 2 en utilisant l’ option alter de la commande kafka topics .
kafka-topics --bootstrap-server kafka:9092 --alter --partitions 2 --topic hello
Vérifiez les informations de partition avec describe des topics kafka .
kafka-topics --bootstrap-server kafka:9092 --topic hello --describe
Pour référence, vous pouvez également vérifier la taille de partition augmentée de 2 sur topic de AKHQ .
Exécutez à nouveau le producer et ajoutez le consumer à la partition nouvellement ajoutée #1.
kafka-console-producer --bootstrap-server kafka:9092 --topic hello
Terminez le consumer connecté à la partition 0 existante et connectez le consumer à la nouvelle partition 1.
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 0
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 1
Créez un nombre aléatoire de messages avec le producer.
Il y a deux consumer, mais le topic est divisé et livré à un seul consumer.
C’est la façon dont kafka fonctionne avec le cache de partition sticky lorsqu’il n’y a pas de key .
S’il n’y a pas de key, le premier numéro de partition envoyé cache et le topic est transmis uniquement à cette partition .
S’il n’y a pas de key , il est inutile d’augmenter la partition car une seule partition est utilisée.
En d’autres termes, la key est une information importante qui détermine la partition dans topic seront stockés dans kafka .
Nous allons ajouter une key pour que les topic soient bien divisés et stockés entre les partition .
Ajoutez option de property au producer et exécutez-la à nouveau.
kafka-console-producer --bootstrap-server kafka:9092 --topic hello --property "key.separator=-" --property "parse.key=true"
Mettons une valeur aléatoire comme producer.
Vous pouvez maintenant voir que le topic est divisé en partition et enregistré.
En particulier, vous pouvez vérifier que la même key est publish sur la même partition via le consumer.
En utilisant l’ option de separator de clé, la key avant le tiret et la value après sont publish.
a est la key et b est la value.
Pour référence, dans le passé, seule la value hello était publish sans key .
Si les valeurs précédant le tiret sont les mêmes, la key est la même.
Il est important de noter que la même key est toujours stockée dans la même partition.
Cependant, si les key sont différentes, elles sont stockées dans la même partition ou dans des partition différentes.
Pour comprendre cette partie, regardons comment gérer les key dans kafka .
kafka hash la key et calcule le reste autant que le nombre de nœuds kafka , et détermine la valeur du résultat comme numéro de partition .
Puisqu’il y a maintenant deux partition, seuls 0 et 1 peuvent apparaître comme numéros de partition .
Pour référence, hash utilise murmur2 hash.
Un point important à comprendre à propos des partition est que kafka ne garantit l’ordre des topic que par partition .
Autrement dit, lorsque publish des topic dont l’ordre est important, placez-les dans la même partition.
J’ai vérifié que la key est toujours stockée dans la même partition,
Pour les topic où l’ordre est important, veillez à utiliser la même key!
Ensuite, j’expliquerai le offset de la partition .
kafka diffère de la queue de message existante en ce qu’il ne supprime pas les messages de la queue après consume .
Les partitions sont similaires aux baies.
Les topic d’ une partition sont stockés dans l’ordre, comme les éléments d’un tableau.
Tout comme vous accédez à une valeur de tableau par index, vous pouvez consume à partir d’un index spécifique de la partition via offset .
Pour référence, chaque partition a le dernier offset.
Ainsi, si un nouveau consumer est connecté sans l’ option offset , il consume à partir du dernier offset .
Cependant, si une option de décalage est donnée, les informations de offset sont consume en premier.
En guise d’exercice, nous allons envoyer deux commandes au terminal.
- Commandez au consumer d’exécuter à partir de offset 0.
- Commande pour exécuter le consumer sans commande de offset .
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 1 --offset 0
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 1
Si vous donnez l’ option offset index 0 , vous pouvez vérifier qu’il est exécuté à nouveau depuis le début.
Si l’ option de décalage n’est pas présente, offset par défaut est la plus récente.
Ne consume que les topic nouvellement publish .
Enfin, comme contrainte importante sur les partition,
Vous ne pouvez pas mettre une valeur plus petite pour la size de la partition .
Seules des valeurs plus grandes peuvent être saisies pour la size de la partition .
Je vais donner la commande alter pour réduire la partition de 2 à 1.
kafka-topics --bootstrap-server kafka:9092 --alter --partitions 1 --topic hello
Vous pouvez voir un message d’erreur vous demandant de définir l’ option de partition sur une valeur supérieure à 2.
Ceci conclut l’explication des topic et des partition de kafka .
La prochaine fois, nous verrons comment utiliser les groups de consumer .
Pour référence, plutôt que le consumer consume directement la partition ,
Les groups de consumer sont davantage utilisés dans la pratique.
Afin de mieux comprendre ces groups de consumer , cette classe
J’ai eu le temps d’apprendre la partition.
Les paramètres de notification d’abonnement et de like sont très utiles pour les créateurs de contenu.
merci