Sélectionner une page
RabbitMQ vs Apache Kafka

Introduction

Que vous intégriez plusieurs microservices, que vous cherchiez à améliorer la fiabilité des applications ou que vous créiez une nouvelle application web, vous pourriez avoir besoin d’une file d’attente de messages (MQ) ou d’une plate-forme de courtier de messages. Ces types de logiciels transmettent des messages de la production d’applications ou de services à la consommation d’applications ou de services.

Deux des plates-formes les plus populaires pour la gestion des messages sont Apache Kafka et RabbitMQ . À un niveau élevé, ils ont des fonctions similaires, bien qu’il existe des différences importantes entre eux. Comprendre ces différences peut vous aider à choisir l’une ou l’autre pour votre cas d’utilisation particulier.

Dans ce blog, nous explorerons le fonctionnement de Kafka et RabbitMQ, certaines de leurs différences et les meilleurs cas d’utilisation pour chacun. 

Modèles de messagerie asynchrones

Kafka et RabbitMQ utilisent tous deux la messagerie asynchrone pour transmettre des informations des applications productrices aux applications consommatrices. La messagerie est considérée comme asynchrone car la production et la consommation d’applications n’ont pas besoin d’être actives en même temps. 

Le producteur peut délivrer un message, et si le consommateur n’est pas actuellement disponible ou capable de le recevoir, le message est stocké jusqu’à ce que le consommateur soit prêt. Cette approche de la messagerie est similaire à un e-mail ou à un SMS asynchrone plutôt qu’à des appels téléphoniques ou à une vidéoconférence synchrones : avec Kafka et RabbitMQ, la messagerie n’a pas à se produire en temps réel. 

Il existe deux principaux modèles de messagerie asynchrones : les files d’attente de messages et les modèles de publication/abonnement. 

Files d’attente de messages

Avec le modèle de file d’attente de messages, une application de production livre des messages à une file d’attente. Lorsque l’application consommatrice est prête à recevoir des messages, elle se connecte à la file d’attente et récupère les messages, en les supprimant de la file d’attente. Vous pouvez avoir plusieurs applications consommatrices, mais chaque message est consommé par un seul consommateur. 

Publish/Subscribe

Avec le modèle de messagerie publication/abonnement (pub/sub), les producteurs publient des messages et plusieurs consommateurs peuvent consommer chaque message. Lorsque les applications consommatrices sont intéressées par les messages d’un producteur particulier, elles s’abonnent à un canal où ce producteur enverra ses messages. 

Ce modèle est généralement utilisé lorsque vous avez besoin d’un message ou d’un événement pour déclencher plusieurs actions. Contrairement au modèle de file d’attente de messages, la messagerie pub/sub garantit que les applications consommatrices reçoivent les messages dans le même ordre que celui dans lequel ils ont été reçus par le système de messagerie.

RabbitMQ

RabbitMQ est un courtier de messages distribués open source. Elle est souvent qualifiée de plate-forme « mature » (elle a été lancée pour la première fois en 2007) et regroupée avec des plates-formes middleware de messagerie « traditionnelles », telles qu’IBM MQ et Microsoft Message Queue. 

Les développeurs choisissent souvent RabbitMQ pour sa flexibilité. Il peut gérer des scénarios de routage complexes et prend en charge plusieurs protocoles de messagerie, notamment AMQP, MQTT et STOMP. Il peut être déployé dans des configurations distribuées pour évoluer et offrir une haute disponibilité. 

RabbitMQ a une grande communauté. Les développeurs peuvent facilement trouver des clients, des plug-ins et des guides, et ils peuvent opter pour un support commercial via Pivotal (qui a été acquis par VMware). RabbitMQ compte également un grand nombre d’utilisateurs d’entreprise de premier plan, notamment Reddit, Robinhood, T-Mobile, trivago, Accenture, Alibaba Travel, etc. 

Architecture

L’architecture RabbitMQ comprend les producteurs, les échanges, les files d’attente et les consommateurs. Un producteur envoie des messages à un échange, qui achemine ensuite les messages vers des files d’attente (ou d’autres échanges). Un consommateur continue ensuite à lire les messages de la file d’attente, souvent jusqu’à une limite prédéterminée de messages.

Files d’attente

Une file d’attente RabbitMQ est une structure de données séquentielle. Les producteurs ajoutent des données à la queue de la file d’attente ; les consommateurs reçoivent des données de la tête de la file d’attente. Les files d’attente sont « premier entré, premier sorti » avec RabbitMQ : le premier message de la file d’attente est consommé en premier. Les files d’attente ont des propriétés obligatoires (telles qu’un nom) et des propriétés facultatives (telles que les arguments utilisés par les plug-ins). 

Échanges de messages

Les échanges de messages RabbitMQ, qui déterminent la manière dont les messages sont acheminés, offrent une grande flexibilité. Avec RabbitMQ, les producteurs envoient des messages à l’un des quatre types d’échange : 

  • Les échanges directs acheminent les messages en fonction de la clé de routage que le message porte. La clé de routage est une chaîne de mots, séparés par des points, qui a une certaine pertinence pour le message.
  • Les échanges Fanout acheminent les messages vers toutes les files d’attente disponibles. Dans ce type d’échange de diffusion, la clé de routage est ignorée.
  • Les échanges thématiques acheminent les messages vers une ou plusieurs files d’attente en fonction d’une correspondance complète ou partielle avec la clé de routage. 
  • Les échanges d’en-tête acheminent les messages en fonction des en-têtes de message, qui peuvent contenir plus d’attributs qu’une clé de routage.

Ces types d’échange permettent à RabbitMQ de gérer des scénarios de routage complexes avec plusieurs applications ou services consommateurs. 

Apache Kafka

Apache Kafka est une plate-forme de diffusion d’événements distribuée open source. Développé à l’origine par LinkedIn pour suivre l’activité du site Web, Kafka est aujourd’hui généralement utilisé pour créer des pipelines de données en temps réel et des applications de streaming. Souvent considérée comme la principale technologie de streaming et de mise en file d’attente pour les applications à grande échelle, toujours actives et basées sur des événements, Kafka figure régulièrement parmi les cinq projets les plus actifs de l’Apache Software Foundation.

Les développeurs choisissent Kafka pour plusieurs raisons :

  • Évolutivité : l’architecture distribuée de Kafka permet une évolutivité horizontale significative.
  • Performance : Kafka est rapide ! Il peut traiter des millions de messages par seconde avec des ressources relativement modestes. 
  • Flexibilité : conçu pour s’interfacer avec une variété de systèmes, Kafka dispose d’API utiles et intuitives.
  • Disponibilité : Kafka offre une haute disponibilité grâce à l’équilibrage de charge et à la réplication des données. 
  • Communauté : En tant que membre de l’Apache Software Foundation, Kafka dispose d’un écosystème et d’une communauté riches. 
  • Forte réputation : Kafka est utilisé par des organisations de premier plan et de premier plan, notamment LinkedIn, mais aussi Netflix, Twitter, Spotify, Pinterest, Airbnb, Uber et bien d’autres.

Architecture 

L’ architecture Kafka comprend des producteurs, des consommateurs, des clusters, des courtiers, des sujets et des partitions. Les producteurs envoient des enregistrements aux clusters, qui stockent ces enregistrements, puis les transmettent aux consommateurs. Chaque nœud de serveur du cluster est un « courtier », qui stocke les données fournies par le producteur jusqu’à ce qu’elles soient lues par le consommateur. 

Les sujets

Au lieu de « files d’attente », Kafka utilise des « sujets ». Un sujet est un flux de données comprenant des enregistrements individuels qui, comme le suggère l’ introduction de Kafka , est comme un dossier dans un système de fichiers. Chaque rubrique est divisée en partitions , qui sont des séquences d’enregistrements immuables où les messages sont ajoutés. Chaque enregistrement a un identifiant séquentiel appelé « décalage », qui définit sa place dans la ligne. Un producteur ajoute des enregistrements à une partition de rubrique et un consommateur s’abonne aux modifications. 

Kafka peut diffuser des messages à travers les partitions. Vous pouvez décider de placer ces partitions sur plusieurs courtiers afin que plusieurs consommateurs puissent lire à partir d’une rubrique en parallèle tout en permettant à une rubrique de contenir plus de données que ne pourrait en contenir une seule machine. Alternativement, les producteurs peuvent créer des flux de messages logiques, ce qui peut aider à garantir la livraison des messages dans le bon ordre pour les consommateurs.

Modèles de messagerie Kafka et RabbitMQ 

Alors que RabbitMQ utilise des échanges pour acheminer les messages vers les files d’attente, Kafka utilise davantage une approche pub/sub. Un producteur envoie ses messages à un sujet précis. Un seul ou plusieurs consommateurs (un « groupe de consommateurs ») peuvent consommer ces messages. Les consommateurs et les groupes de consommateurs peuvent alors s’abonner à un ou plusieurs sujets afin d’être alertés lorsqu’il y a de nouveaux messages ou événements. 

Avec Kafka, les consommateurs peuvent relire les messages stockés précédemment, aussi longtemps que vous décidez de conserver les messages dans des partitions. Cette capacité à conserver les messages ouvre des cas d’utilisation clés tels que la recherche d’événements et l’agrégation de journaux (décrits plus loin dans cet article).

Kafka et RabbitMQ vous permettent tous deux de pousser et d’extraire des messages, et de mettre en mémoire tampon les messages lorsque le consommateur est occupé ou indisponible. Les deux fournissent également un moyen d’obtenir plus d’un message à la fois. Avec RabbitMQ, c’est ce qu’on appelle la « pré-extraction » et avec Kafka, il s’agit du traitement des messages en « taille de lot ».

Sécurité et opérations

Kafka et RabbitMQ fournissent tous deux des outils et des capacités intégrés pour la gestion de la sécurité et des opérations. De plus, les deux écosystèmes de plate-forme offrent des outils tiers qui augmentent les capacités de surveillance et de gestion. 

Kafka propose des fonctionnalités de sécurité telles que le cryptage TLS (Transport Layer Security), l’authentification SASL (Simple Authentication and Security Layer) et le contrôle d’accès basé sur les rôles (RBAC). Si vous décidez de gérer votre propre cluster, vous pouvez contrôler les politiques de sécurité Kafka via une interface de ligne de commande (CLI). Des outils de surveillance tiers peuvent vous aider à suivre les métriques des courtiers, des sujets, des partitions, des producteurs et des consommateurs. 

Comme Kafka, RabbitMQ prend en charge le cryptage TLS, l’authentification SASL et RBAC. En plus des outils CLI, RabbitMQ propose une API basée sur un navigateur pour la gestion et la surveillance des utilisateurs et des files d’attente. Vous pouvez utiliser des outils open source ou commerciaux pour surveiller les métriques des nœuds, des clusters, des files d’attente, etc. 

Quels sont les meilleurs cas d’utilisation ?

À un niveau élevé, Kafka et RabbitMQ ont des cas d’utilisation communs. Par exemple, les deux peuvent être utilisés dans le cadre d’une architecture de microservices qui connecte les applications productrices et consommatrices. Les deux peuvent également être utilisés comme tampon de messages, fournissant un emplacement pour stocker temporairement les messages lorsque les applications de consommation ne sont pas disponibles ou en lissant les pics de messages générés par les producteurs.  

Les deux peuvent également gérer de très grandes quantités de messages. Mais parce qu’ils traitent ces messages de différentes manières, chacun est mieux adapté à des cas d’utilisation subtilement différents. 

Cas d’utilisation d’Apache Kafka

Certains des meilleurs cas d’utilisation de Kafka utilisent les capacités de traitement de flux et de débit élevé de la plate-forme.

Suivi d’activité à haut débit : Kafka peut être utilisé pour une variété d’applications de suivi d’activité à haut débit et à haut débit. Par exemple, vous pouvez utiliser Kafka pour suivre l’activité du site Web (son cas d’utilisation d’origine), ingérer les données des capteurs IoT, surveiller les patients en milieu hospitalier ou garder un œil sur les expéditions. 

Traitement de flux : Kafka vous permet de mettre en œuvre une logique applicative basée sur des flux d’événements. Vous pouvez tenir un compte courant des types d’événements ou calculer une valeur moyenne au cours d’un événement qui dure plusieurs minutes. Par exemple, si vous avez une application IoT qui intègre des thermomètres automatisés, vous pouvez suivre la température moyenne au fil du temps et déclencher des alertes si les lectures s’écartent d’une plage de température cible.

Source d’événements : Kafka peut être utilisé pour prendre en charge la recherche d’événements, dans laquelle les modifications apportées à l’état d’une application sont stockées sous forme de séquence d’événements. Ainsi, par exemple, vous pouvez utiliser Kafka avec une application bancaire. Si le solde du compte est corrompu d’une manière ou d’une autre, vous pouvez recalculer le solde en fonction de l’historique stocké des transactions. 

Agrégation de journaux : comme pour la recherche d’événements, vous pouvez utiliser Kafka pour collecter des fichiers journaux et les stocker dans un emplacement centralisé. Ces fichiers journaux stockés peuvent alors fournir une source unique de vérité pour votre application.

Cas d’utilisation de RabbitMQ

Certains des meilleurs cas d’utilisation de RabbitMQ tirent parti de sa flexibilité, à la fois pour le routage des messages au sein des architectures de microservices et parmi les applications héritées. 

Routage complexe : RabbitMQ peut être le meilleur choix lorsque vous devez acheminer des messages entre plusieurs applications consommatrices, comme dans une architecture de microservices. L’échange de hachage cohérent RabbitMQ peut être utilisé pour équilibrer le traitement de la charge sur un service de surveillance distribué, par exemple. Les échanges alternatifs peuvent également être utilisés pour acheminer une partie des événements vers des services spécifiques pour les tests A/B.  

Applications héritées : à l’ aide des plug-ins disponibles (ou en développant les vôtres), vous pouvez déployer RabbitMQ comme moyen de connecter des applications grand public avec des applications héritées. Par exemple, vous pouvez utiliser un plug-in Java Message Service (JMS) et une bibliothèque cliente JMS pour communiquer avec les applications JMS. 

Pour tout renseignement sur nos services d’agence digitale à Montpellier. Contactez-nous via le chat de notre site web du lundi au vendredi de 9h00 à 18h00

Demander un devis Solutions Développement I Solutions Design Graphique I Solutions Marketing Digital I Blog