Utilisation d'Apache Kafka

Apache Kafka est une plate-forme de messagerie de publication et d'abonnement distribuée à code source libre spécialement conçue pour gérer la diffusion en continu des données en temps réel pour la diffusion en continu, la mise en correspondance et la réexécution des flux de données afin d'assurer des opérations rapides et évolutives. Kafka est une solution basée sur un courtier qui fonctionne en maintenant les flux de données en tant qu'enregistrements dans un groupe de serveurs.

Dans les grappes du service de mégadonnées, Kafka peut être utilisé de l'une des façons suivantes.

  1. Créer une grappe de profils Kafka :
    1. Créer une grappe.
    2. Dans le champ Profil de grappe, sélectionnez Kafka.
  2. Créez une grappe de profils Hadoop_Extended et ajoutez Kafka à la grappe :
    1. Créer une grappe.
    2. Dans le champ Profil de grappe, sélectionnez Hadoop_Extended.
    3. Ajoutez Kafka à la grappe.

Propriétés de configuration Kafka

Propriétés de configuration Kafka incluses dans le service de mégadonnées 3.1.1 ou version ultérieure.

Configuration Propriété Description
kafka-env kafka_opts Options Kafka
kerberos_param Paramètre Kerberos Kafka
kafka_jmx_opts Options Kafka JMX
kafka_classpath Variable classpath Kafka

Meilleures pratiques d'Apache Kafka

Configuration requise pour le matériel

Apache Kafka, pour son fonctionnement normal, nécessite une petite quantité de ressources, en particulier avec un certain réglage de la configuration. Par défaut, Kafka peut s'exécuter sur 1 coeur et 1 Go de mémoire avec un stockage ajusté en fonction des exigences pour la conservation des données.

Le CPU est rarement un goulot d'étranglement car Kafka est lourd en E/S. Cependant, il est important d'avoir une CPU de taille moyenne avec suffisamment de threads pour gérer les connexions simultanées et les tâches en arrière-plan.

  • Noeud de courtier Kafka : Huit coeurs, 64 Go à 128 Go de mémoire vive, deux disques ou plus de 2 To (standard2.8 ou supérieur, de préférence DenseIO ou équivalent)
  • Un minimum de trois noeuds de courtier Kafka
  • Profil matériel : Plus de RAM et de disques haute vitesse sont meilleurs
  • Installer des courtiers Kafka sur les noeuds de travail, car leur taille peut augmenter horizontalement

Topologie de grappe Kafka recommandée

  1. Supprimer le gestionnaire de noeuds du noeud de travail
  2. Comme les courtiers Kafka ont besoin d'au moins trois noeuds pour la réplication/la haute disponibilité, vous pouvez envisager de provisionner des noeuds de travail supplémentaires pour Kafka.
  3. Provisionner des noeuds de travail HDFS supplémentaires et mettre hors service le noeud de données et le gestionnaire de noeuds.
    Note

    Les noeuds de travail courants sont modélisés après les noeuds de travail HDFS, qui sont réutilisés pour les noeuds de courtier Kafka. Par conséquent, si les noeuds de courtier Kafka sont exécutés avec les noeuds de données HDFS, HDFS perd un stockage efficace.

Les paramètres courants à régler lors de la configuration de Kafka sont les suivants :

Fonctionnalités à régler Paramètres à ajuster
Conservation des messages Taille de disque
Débit du client (producteur et consommateur) Capacité du réseau
Débit du fournisseur E/S de disque
Débit du consommateur Mémoire

Ces paramètres varient d'un cas à l'autre et doivent être définis avec soin pour obtenir de meilleures performances. Aucun paramètre unique ne convient à tous les cas d'utilisation.

ZooKeeper

ZooKeeper est un composant important d'une grappe Kafka qui agit en tant que service de coordination distribué. ZooKeeper est chargé de surveiller et de préserver les métadonnées de la grappe, de coordonner les opérations de nombreux noeuds et d'assurer la stabilité et la cohérence générales de la grappe Kafka.

Les grappes HA du service de mégadonnées comprennent trois hôtes Zookeeper. Toutefois, pour des cas d'utilisation de production plus importants, nous recommandons d'adapter horizontalement les hôtes Zookeeper, car ils sont partagés entre d'autres services avec la grappe du service de mégadonnées.

Considérations relatives à la performance

Kafka est optimisé nativement. Toutefois, un certain réglage est nécessaire pour améliorer les performances du cluster. Prenons deux mesures principales :

  • Débit : Nombre de messages qui arrivent dans un laps de temps donné.
  • Latence : Temps nécessaire au traitement de chaque message.

Courtiers de réglage

Vous contrôlez le nombre de partitions dans un sujet. L'augmentation du nombre de partitions et du nombre de courtiers dans un cluster entraîne une augmentation du parallélisme de la consommation des messages, ce qui améliore le débit d'un cluster Kafka. Toutefois, le temps nécessaire pour répliquer des données entre les jeux de répliques augmente également.

Producteurs de réglage

Vous pouvez exécuter un fournisseur de portlets selon deux modes différents : synchrone et asynchrone. En mode synchrone, dès qu'un message est publié, le fournisseur envoie une demande au broker. Par conséquent, si vous produisez 100 messages par seconde, le producteur envoie 100 demandes par seconde au broker. Cela diminue le débit et agit comme une opération de blocage. Ainsi, lors de la publication d'un nombre élevé de messages, il est préférable d'exécuter des émetteurs en mode asynchrone.

En mode asynchrone, vous devez régler deux paramètres pour optimiser la performance : batch.size et linger.ms (temps de lecture). La taille du lot est la taille des données à envoyer dans un lot, mesurée en octets. Par exemple, si vous réglez la taille du lot à 100, le producteur attend que les messages totalisent jusqu'à 100 octets avant d'appeler le broker. Si la production de messages est faible et que vous définissez une taille de lot élevée, le producteur attend longtemps avant de produire des messages. Cela réduit le débit et augmente la latence de transmission des messages. Par conséquent, en fonction du nombre de messages produits, cette valeur doit être optimisée. La taille de lot par défaut est de 16 384.

Le temps d'attente est une autre mesure basée sur le moment où un producteur décide d'envoyer une demande à un courtier. Dans l'exemple précédent, si la taille du lot est réglée à 100 octets et que vous ne produisez que 50 octets par seconde, le fournisseur doit attendre deux secondes avant de publier ces messages. Pour éviter ce retard, vous pouvez régler le temps d'attente (mesuré en millisecondes) pour vous assurer que le producteur n'attend pas trop longtemps avant d'envoyer des messages. Le réglage du temps de veille à 500 ms dans cet exemple permet au producteur d'attendre une demi-seconde au maximum.

La compression peut également améliorer la latence. Par défaut, les messages Kafka ne sont pas compressés, mais vous pouvez configurer des producteurs pour les compresser. Les courtiers et les consommateurs ont alors la surcharge supplémentaire de décompression des messages, mais la latence globale devrait être réduite car la taille physique des données transmises sur le réseau est plus petite.

Régler les consommateurs

Les consommateurs reçoivent des messages par lots, de la même manière que les producteurs publient par lots. Si vous extrayez de nombreux messages et que vous prenez beaucoup de temps pour les traiter, le débit en souffre. De même, si vous interrogez le broker pour un seul message à chaque fois, le nombre de demandes adressées au broker peut diminuer le débit.

Le fait d'avoir plus de partitions et de consommateurs au sein d'un groupe de consommateurs peut contribuer à améliorer le débit. Mais rappelez-vous qu'à mesure que le nombre de consommateurs augmente, le nombre de demandes de validation de compensation augmente également. Etant donné que la validation d'un décalage envoie un message Kafka à un sujet interne, cela augmente indirectement la charge sur le broker. Par conséquent, il est essentiel d'avoir un nombre optimal de consommateurs.

MirrorMaker Optimisation de la performance

Kafka MirrorMaker est un outil utilisé pour mettre en miroir les messages Kafka d'un centre de données ou d'une grappe vers un autre. Parce que cela produit en interne des messages à Kafka, la plupart des techniques d'optimisation déjà discutées sont également vraies ici. Etant donné que cela implique également la transmission de messages sur de longues distances, il existe quelques autres paramètres de configuration qui peuvent être réglés pour de meilleures performances.

Note

Lors du réglage, assurez-vous de baser vos actions sur les besoins de votre cas d'utilisation d'affaires.
  • MirrorMaker2 Emplacement : MirrorMaker peut être installé à la source ou à la destination. Cependant, nous recommandons d'installer à la destination car la production de messages sur de longues distances augmente les chances de perdre des données pendant la transmission.
  • Compression : Par défaut, la compression des messages dans les producteurs Kafka est réglée à Aucun. Toutefois, pour compresser les messages sortant de la source vers la destination, remplacez la compression par gzip. Cela permet d'augmenter la taille des lots.
  • Taille de lot : L'augmentation de la taille de lot des messages augmente le débit. La combinaison de ceci avec la compression garantit qu'un grand nombre de messages sont transmis rapidement. Si la taille du lot cible prend plus de temps que le temps de conservation configuré, les lots envoyés ne sont pas complètement remplis. Cela réduit l'efficacité de la compression et gaspille la bande passante. Par conséquent, il est important de régler la taille du lot et d'activer la compression et le réglage du temps d'attente.
  • Temps d'attente : Augmenter le temps d'attente pour permettre le remplissage complet des lots est important. Cela peut augmenter la latence, mais le débit global s'améliore. Vous devez tenir compte de l'importance de la latence pour votre cas d'utilisation professionnelle.
  • Augmenter le parallélisme : Pour augmenter encore le débit, vous pouvez déployer plusieurs instances de MirrorMaker sous le même groupe de consommateurs. Cela facilite la réception de plusieurs consommateurs MirrorMaker à partir de la même source et la production vers la destination en parallèle.

Configurations du serveur de production dans le réglage de Kafka

Plusieurs autres paramètres de configuration peuvent être réglés pour améliorer les performances de Kafka dans un environnement de production. Les paramètres suivants améliorent les performances de réplication des messages dans les partitions :

  • num.replica.fetchers : Spécifie le nombre d'unités d'exécution utilisées pour répliquer les messages du chef de file vers les abonnés. Un plus grand nombre d'extracteurs de répliques améliore le parallélisme dans la réplication.
  • replica.fetch.max.bytes : Indique le nombre d'octets de données à extraire du chef de file. Un nombre plus élevé indique une plus grande quantité de données extraites, ce qui améliore le débit de réplication.
  • num.partitions : Spécifie le nombre maximal de consommateurs qu'un sujet peut avoir dans un groupe d'utilisateurs spécifique, qui est égal au nombre de partitions disponibles dans ce sujet. L'augmentation des partitions augmente le parallélisme et donc le débit. Cependant, de nombreuses partitions consomment également plus de ressources, vous devez donc également augmenter les ressources.

Équilibrer les grappes Apache Kafka

Chaque fois qu'un nouveau courtier est ajouté à une grappe Kafka, les partitions existantes ne sont pas réparties au moyen du nouveau courtier. Cela signifie que le nouveau courtier n'est pas occupé, et si un ou plusieurs anciens courtiers tombent en panne, la réplication et les leaders potentiels sont réduits. C'est ce que l'on appelle le leader skew. Vous pouvez éviter cela en vous assurant que tout courtier nouvellement ajouté obtient une part des partitions. Il est important de rééquilibrer le cluster. De même, si un courtier a plus que le nombre moyen de partitions pour un sujet, appelé écheveau du courtier, cela peut entraîner des problèmes de performance.

Optimisation de la performance de Kafka

Lors de l'exécution de Kafka en tant que grappe, il existe plusieurs façons d'optimiser sa performance. Vous pouvez régler différents paramètres de configuration pour équilibrer le débit et la latence. L'ingénierie est impliquée pour calculer les meilleures valeurs pour certains de ces paramètres, tels que le temps de conservation, la taille du lot, le nombre de partitions, etc. Selon le cas d'utilisation, vous pouvez décider que le débit est plus important que la latence, que la latence est plus importante que le débit ou qu'un équilibre entre les deux est préférable.