Apache Kafka

Partitionnement Apache Kafka

Partitionnement Apache Kafka
Dans cette leçon, nous verrons ce que nous entendons par partitionnement dans Apache Kafka et comment cela affecte les performances d'un cluster Kafka. Le concept de partitionnement est au cœur du cluster Kafka car il utilise le partitionnement comme principal moyen de faire évoluer et d'augmenter les performances.

Veuillez noter qu'il ne s'agit pas d'un cours d'introduction. Veuillez lire Qu'est-ce qu'Apache Kafka et comment cela fonctionne-t-il avant de continuer cette leçon pour acquérir un aperçu plus approfondi.

Sujets à Kafka

Un sujet dans Kafka est quelque chose où un message est envoyé. Les applications grand public qui s'intéressent à ce sujet tirent le message à l'intérieur de ce sujet et peuvent tout faire avec ces données. Jusqu'à une heure précise, n'importe quel nombre d'applications grand public peut extraire ce message autant de fois.

Considérez un sujet comme la page du blog Ubuntu de LinuxHint. Les leçons sont mises à l'éternité et n'importe quel nombre de lecteurs passionnés peuvent venir lire ces leçons autant de fois qu'ils le souhaitent ou passer à la leçon suivante à leur guise. Ces lecteurs peuvent également être intéressés par d'autres sujets de LinuxHint.

Partitionnement par sujet

Kafka est conçu pour gérer des applications lourdes et mettre en file d'attente un grand nombre de messages qui sont conservés dans un sujet. Pour garantir une tolérance aux pannes élevée, chaque sujet est divisé en plusieurs partitions de sujet et chaque partition de sujet est gérée sur un nœud distinct. Si l'un des nœuds tombe en panne, un autre nœud peut agir en tant que leader du sujet et peut servir des sujets aux consommateurs intéressés. Voici comment les mêmes données sont écrites sur plusieurs partitions de rubrique :

Partitions thématiques


Maintenant, l'image ci-dessus montre comment les mêmes données sont répliquées sur plusieurs partitions. Voyons comment différentes partitions peuvent agir en tant que leader sur différents nœuds/partitions :

Kafka Broker Partitionnement

Lorsqu'un client écrit quelque chose dans un sujet à une position pour laquelle la partition dans le courtier 0 est le leader, ces données sont ensuite répliquées sur les courtiers/nœuds afin que le message reste en sécurité :

Réplication entre les partitions de courtier

Plus de partitions, débit plus élevé

Kafka utilise Parallélisme pour fournir un débit très élevé aux applications des producteurs et des consommateurs. En fait, de la même manière, il conserve également son statut de système à haute tolérance aux pannes. Comprenons comment un débit élevé est atteint avec le parallélisme.

Lorsqu'une application Producteur écrit un message sur une partition dans Broker 0, Kafka ouvre plusieurs threads en parallèle afin que le message puisse être répliqué sur tous les Brokers sélectionnés en même temps. Du côté consommateur, une application consommateur consomme les messages d'une seule partition via un thread. Plus le nombre de partitions est élevé, plus il est possible d'ouvrir de threads consommateurs afin que tous puissent également fonctionner en parallèle. Cela signifie que plus il y a de partitions dans un cluster, plus le parallélisme peut être exploité, créant un système à très haut débit.

Plus de partitions ont besoin de plus de gestionnaires de fichiers

Juste pour que vous ayez étudié ci-dessus comment nous pouvons augmenter les performances d'un système Kafka en augmentant simplement le nombre de partitions. Mais nous devons faire attention à la limite vers laquelle nous nous dirigeons.

Chaque partition de sujet dans Kafka est mappée à un répertoire dans le système de fichiers du courtier de serveur où elle s'exécute. Dans ce répertoire de journal, il y aura deux fichiers : un pour l'index et un autre pour les données réelles par segment de journal. Actuellement, dans Kafka, chaque courtier ouvre un descripteur de fichier à la fois pour l'index et le fichier de données de chaque segment de journal. Cela signifie que si vous avez 10 000 partitions sur un seul courtier, 20 000 gestionnaires de fichiers s'exécuteront en parallèle. Bien qu'il ne s'agisse que de la configuration du courtier. Si le système sur lequel le Broker est déployé a une configuration élevée, ce ne sera guère un problème.

Risque avec un nombre élevé de partitions

Comme nous l'avons vu dans les images ci-dessus, Kafka utilise la technique de réplication intra-cluster pour répliquer un message d'un leader vers les partitions Replica qui se trouvent dans d'autres courtiers. Les applications producteur et consommateur lisent et écrivent sur une partition qui est actuellement le leader de cette partition. Lorsqu'un courtier échoue, le leader de ce courtier deviendra indisponible. Les métadonnées sur qui est le leader sont conservées dans Zookeeper. Sur la base de ces métadonnées, Kafka attribuera automatiquement le leadership de la partition à une autre partition.

Lorsqu'un courtier est arrêté avec une commande de nettoyage, le nœud de contrôleur du cluster Kafka déplacera les leaders du courtier d'arrêt en série i.e. un à la fois. si l'on considère que déplacer un seul leader prend 5 millisecondes, l'indisponibilité des leaders ne perturbera pas les consommateurs car l'indisponibilité est de très courte durée. Mais si l'on considère quand le courtier est tué d'une manière impur et que ce courtier contient 5000 partitions et parmi celles-ci, 2000 étaient les chefs de partition, l'attribution de nouveaux chefs pour toutes ces partitions prendra 10 secondes, ce qui est très élevé lorsqu'il s'agit de applications en demande.

Conclusion

Si nous considérons comme un penseur de haut niveau, plus de partitions dans un cluster Kafka conduit à un débit plus élevé du système. En gardant cette efficacité à l'esprit, il faut également considérer la configuration du cluster Kafka que nous devons maintenir, la mémoire que nous devons affecter à ce cluster et comment nous pouvons gérer la disponibilité et la latence en cas de problème.

Lisez plus de messages basés sur Ubuntu ici et bien plus encore sur Apache kafka.

Comment utiliser AutoKey pour automatiser les jeux Linux
AutoKey est un utilitaire d'automatisation de bureau pour Linux et X11, programmé en Python 3, GTK et Qt. En utilisant ses fonctionnalités de script e...
Comment afficher le compteur FPS dans les jeux Linux
Les jeux Linux ont reçu une impulsion majeure lorsque Valve a annoncé la prise en charge de Linux pour le client Steam et leurs jeux en 2012. Depuis l...
Comment télécharger et jouer à Civilization VI de Sid Meier sur Linux
Présentation du jeu Civilization 6 est une version moderne du concept classique introduit dans la série de jeux Age of Empires. L'idée était assez sim...