1、Cas d’utilisation
1.RabbitMQ:
Convient aux situations exigeant une grande facilité d’utilisation et une grande souplesse
Traitement des tâches asynchrones : RabbitMQ fournit un mécanisme fiable de transmission des messages, adapté au traitement de tâches asynchrones. On peut, par exemple, placer les tâches longues dans une file de messages, puis les faire traiter de manière asynchrone par des consommateurs, ce qui améliore la réactivité et la capacité de montée en charge du système.
Découplage des composants du système : en utilisant RabbitMQ comme intergiciel de messagerie, les différents composants du système peuvent être découplés grâce aux messages, ce qui permet une architecture à couplage faible et améliore la maintenabilité et la souplesse du système.
Architecture pilotée par les événements : le modèle de publication-abonnement de RabbitMQ permet de construire une architecture pilotée par les événements. Les événements du système sont publiés sous forme de messages dans les sujets correspondants, et les différents consommateurs peuvent s’abonner aux sujets qui les intéressent pour effectuer les traitements appropriés.
2.RocketMQ :
Convient au traitement de données à grande échelle et aux situations nécessitant un débit élevé
Transactions distribuées : RocketMQ prend en charge les messages transactionnels distribués et convient aux scénarios de transactions distribuées impliquant plusieurs systèmes métier. Il garantit la cohérence et la fiabilité des messages tout en offrant une transmission à haut débit.
Traitement des journaux en temps réel : grâce à son débit élevé et à sa faible latence, RocketMQ peut servir au traitement des journaux en temps réel, notamment à leur collecte, leur analyse et leur agrégation.
Traitement en flux:RocketMQ prend en charge le traitement en flux et permet de transmettre les flux de données produits à un framework de traitement en flux(comme Flink ou Spark Streaming)via une file de messages, afin de traiter et d’analyser les données en temps réel.
3.Kafka:
Adapté aux scénarios de traitement en temps réel de flux de données à haut débit et de traitement en continu
Pipelines de données et traitement des données en temps réel : grâce à son débit élevé et à son stockage persistant, Kafka constitue un choix idéal pour construire des pipelines de données fiables et des systèmes de traitement en temps réel, destinés à la collecte, au transfert et au traitement de données en flux.
Traitement des journaux et des flux d’événements : le partitionnement de Kafka et ses garanties d’ordre en font une solution idéale pour traiter les journaux et les flux d’événements, notamment pour la collecte des journaux applicatifs, la journalisation des événements et la surveillance des activités métier.
Analyse de flux et apprentissage automatique en temps réel : associé à des frameworks de traitement de flux tels que Flink et Spark Streaming, Kafka prend en charge des tâches d’analyse de flux et d’apprentissage automatique en temps réel. Il traite les flux de données en direct pour fournir des informations et une aide à la décision en temps réel.
2、Architecture des services
RabbitMQ
Channel(canal):un Channel est une connexion virtuelle entre RabbitMQ et l’application. En créant plusieurs canaux sur une connexion physique(connection), l’application peut effectuer des opérations de messagerie de façon concurrente. Les canaux assurent l’envoi et la réception des messages et exécutent certaines opérations associées, comme la déclaration de files, la définition d’échangeurs et les liaisons. Un canal peut être considéré comme une session légère qui interagit avec RabbitMQ par l’intermédiaire d’une connexion physique.
Exchange (échangeur) : l’échangeur est le centre de réception et de transmission des messages. Lorsqu’un message est envoyé à RabbitMQ, il est acheminé par un échangeur. Selon son type et ses règles de liaison, celui-ci dirige le message vers une ou plusieurs files d’attente. Les types courants d’échangeurs sont les échangeurs directs (direct), par sujet (topic), à diffusion générale (fanout) et par en-têtes (headers).
Queue(file d’attente): la file d’attente est la mémoire tampon utilisée par RabbitMQ pour stocker les messages. Lorsqu’un message ne peut pas être acheminé immédiatement vers un consommateur, il est conservé dans la file d’attente jusqu’à ce qu’un consommateur le récupère et le traite. Chaque file possède un nom unique, et les messages sont livrés et consommés dans l’ordre FIFO(premier entré, premier sorti).
Virtual Host(hôte virtuel): un hôte virtuel est un environnement d’isolation logique qui permet de diviser un serveur RabbitMQ en plusieurs parties indépendantes. Chaque hôte virtuel possède ses propres échanges, files d’attente, liaisons et paramètres d’autorisation. Les hôtes virtuels permettent d’isoler différentes applications ou différents services, et offrent des moyens de contrôler la sécurité et la gestion des ressources.
Broker(courtier): un Broker est une instance du serveur de files de messages RabbitMQ, chargée de recevoir, de stocker et d’acheminer les messages. Il sert d’intermédiaire en transmettant aux consommateurs les messages envoyés par les producteurs. Une instance RabbitMQ peut contenir plusieurs Brokers, chacun pouvant héberger plusieurs hôtes virtuels et files d’attente.
RocketMQ
NameServer(serveur de noms): NameServer est le composant de service de noms de RocketMQ, utilisé pour gérer et fournir les informations de routage des Broker. Il sert de centre de métadonnées et assure notamment la maintenance des informations d’enregistrement des Broker et des informations de routage des Topic. Avant d’envoyer et de recevoir des messages, les Producer et les Consumer doivent interagir avec NameServer pour obtenir les bonnes informations sur les Broker.
Controller(contrôleur): Controller est le composant de contrôle de RocketMQ, chargé de coordonner et de gérer le fonctionnement de l’ensemble du cluster RocketMQ. Il surveille les changements d’état des Broker, gère l’augmentation et la réduction de la taille du cluster et effectue des opérations comme l’équilibrage de charge. Controller est l’un des composants centraux du cluster RocketMQ ; il assure la fiabilité de son fonctionnement et l’automatisation de sa gestion.
Broker (courtier) : le Broker est un nœud de stockage et de traitement des messages de RocketMQ. Il reçoit les messages du Producer et les stocke sur disque. Le Broker traite également les requêtes de récupération des messages du Consumer et lui transmet les messages pour consommation. Un cluster RocketMQ peut comprendre plusieurs Brokers, chacun étant chargé de stocker les données de messages d’une partie des Topics.
KafkaMQ
Broker (courtier) : un Broker est un nœud d’un cluster Kafka chargé de stocker et de traiter les messages. Chaque Broker est une instance indépendante du serveur Kafka. Il peut s’agir d’un serveur physique distinct, d’une machine virtuelle ou d’un conteneur. Un cluster Kafka peut comprendre plusieurs Brokers, qui collaborent pour assurer une transmission des messages à haute disponibilité et à haut débit.
Topic (sujet) : un Topic est une catégorie logique ou un sujet regroupant des messages. C’est l’unité de publication et d’abonnement des messages. Le Producer publie les messages dans le Topic désigné, tandis que le Consumer s’abonne aux Topics qui l’intéressent pour recevoir les messages. Un Topic peut être considéré comme un conteneur de messages permettant de classer et de regrouper les messages apparentés.
Partition(partition): un Topic peut être divisé en une ou plusieurs partitions, chacune constituant un sous-ensemble du Topic. La partition est la plus petite unité de stockage et de transmission des messages. Chaque partition correspond physiquement à un fichier journal indépendant ; ces fichiers sont répartis sur différents Brokers. Les partitions permettent à Kafka d’assurer une mise à l’échelle horizontale et un traitement parallèle, tout en offrant un débit supérieur. Dans chaque partition, les messages sont stockés et transmis dans l’ordre premier entré, premier sorti.
3、Persistance et fiabilité :
RabbitMQ : RabbitMQ utilise un mécanisme de persistance des messages sur disque pour garantir leur fiabilité. Il prend en charge plusieurs mécanismes d’accusé de réception ainsi que les transactions, ce qui permet d’assurer une transmission fiable des messages.
RocketMQ : RocketMQ possède de solides fonctionnalités de persistance et de fiabilité, prend en charge l’écriture synchrone sur disque et la réplication asynchrone, et peut ainsi garantir une transmission des messages hautement fiable.
Kafka:Kafka stocke les messages de manière persistante, en les écrivant dans des fichiers journaux sur disque. Ses mécanismes de partitionnement et de réplication assurent une grande fiabilité et un stockage persistant.
4、Débit
RabbitMQ : le débit de RabbitMQ est généralement assez faible et convient aux applications de petite et moyenne taille. RabbitMQ est adapté aux applications de petite et moyenne taille et peut généralement traiter des volumes allant de dizaines de milliers à des centaines de milliers de messages. Il privilégie surtout la fiabilité de la transmission des messages et leur persistance ; pour répondre à des exigences de débit élevé, des optimisations et des ajustements peuvent être nécessaires.
RocketMQ:RocketMQ offre un débit élevé, avec une capacité de traitement pouvant atteindre l’ordre du million de messages. Il excelle dans les transactions distribuées et les échanges de messages à grande échelle.
Kafka:Kafka est un système de files de messages réputé pour son débit élevé, capable de traiter des volumes de plusieurs millions de messages, voire davantage. Il convient aux scénarios nécessitant un débit élevé, comme le traitement de données à grande échelle, le traitement de flux en temps réel et le traitement des journaux.
5、Temps de réponse
6、Communauté et écosystème
RabbitMQ : RabbitMQ bénéficie d’un riche écosystème de plugins et d’outils, ainsi que du soutien d’une vaste communauté de développeurs.
RocketMQ : RocketMQ est largement utilisé en Chine et bénéficie du riche écosystème d’Alibaba ainsi que du soutien de sa communauté.
Kafka : Kafka possède une communauté open source active et un vaste écosystème, et est largement adopté par de nombreuses grandes entreprises.
Étoile Github
Contributeurs Github
Dans l’ensemble : rabbitmq<rocketmq<kafka
7、Principes de conception
RabbitMQ : RabbitMQ est un intergiciel de messagerie open source fondé sur AMQP (Advanced Message Queuing Protocol, protocole avancé de mise en file des messages). Il privilégie la facilité d’utilisation et la souplesse, et prend en charge plusieurs modes de messagerie ainsi qu’une transmission fiable des messages.
RocketMQ : RocketMQ est un intergiciel de messagerie distribué qu’Alibaba a publié en open source. Initialement conçu pour répondre aux besoins internes d’Alibaba en matière de traitement de données massives, il se caractérise par un débit élevé et une faible latence. En 2016, Alibaba a fait don de RocketMQ à l’Apache Software Foundation.
Kafka:Kafka est une plateforme distribuée de traitement de flux développée par LinkedIn, principalement utilisée pour traiter en temps réel des flux de données à haut débit, en stockant et en traitant les données de manière persistante. En 2011, Kafka est devenu un projet open source Apache.
8、Modèle de données
RabbitMQ : RabbitMQ utilise un modèle de file d’attente (Queue). Les messages sont envoyés dans une file, d’où les consommateurs les reçoivent pour les traiter.
RocketMQ : RocketMQ utilise un modèle de sujets (Topic) et d’étiquettes (Tag). Les messages sont publiés dans des sujets, et les consommateurs peuvent s’abonner aux messages et les filtrer selon les sujets et les étiquettes.
Kafka : Kafka utilise un modèle de publication-abonnement. Les messages sont publiés dans des topics ; plusieurs consommateurs peuvent s’abonner à un même topic et consommer les messages indépendamment.
9、Outils d’administration Web
RabbitMQ
Interface d’administration Web de RabbitMQ : RabbitMQ fournit une interface d’administration Web accessible depuis un navigateur. Son interface intuitive permet de consulter et de gérer les différents aspects du serveur RabbitMQ, notamment les files, les échanges, les liaisons et les permissions des utilisateurs. Par défaut, elle fonctionne sur le port 15672.
RokcetMQ
RocketMQ Console:l’équipe officielle de RocketMQ fournit une console Web appelée RocketMQ Console. Elle propose une interface visuelle pour gérer et surveiller les différents aspects d’un cluster RocketMQ, notamment les topics, les groupes de consommateurs, la recherche de messages et les statistiques de performances. Vous pouvez utiliser cet outil en accédant à l’URL de la console.
Kafka
Kafka Manager : Kafka Manager est un outil graphique d’administration open source développé par Yahoo pour gérer les clusters Apache Kafka. Il propose notamment la surveillance en temps réel de l’état du cluster, la gestion des sujets et des partitions, ainsi que celle des groupes de consommateurs.
10、Modèles de messagerie
Les modèles de transmission des principaux intergiciels de messagerie sont essentiellement le modèle point à point et le modèle publication-abonnement. Plus précisément :
RabbitMQ :
Modèle publication-abonnement : RabbitMQ prend en charge le modèle publication-abonnement, dans lequel les producteurs publient les messages vers un échangeur (Exchange), qui les transmet ensuite à plusieurs files d’attente qui lui sont liées par des liaisons (Binding). Les consommateurs peuvent recevoir les messages indépendamment depuis les files d’attente.
Modèle point à point : RabbitMQ prend également en charge le modèle point à point, dans lequel le producteur envoie les messages à une file d’attente précise, puis les consommateurs les reçoivent depuis cette file. Chaque message ne peut être reçu et traité que par un seul consommateur.
2.RocketMQ :
Modèle de publication-abonnement : RocketMQ prend en charge le modèle de publication-abonnement, dans lequel les producteurs envoient les messages à un sujet(Topic)donné, puis les consommateurs s’abonnent aux sujets qui les intéressent. Le modèle d’abonnement de RocketMQ propose plusieurs modes, comme le mode diffusion et le mode cluster, permettant la multidiffusion des messages ou leur consommation avec équilibrage de charge.
Mode file d’attente : RocketMQ prend également en charge un mode file d’attente, dans lequel les producteurs envoient les messages à une file donnée, puis les consommateurs les reçoivent depuis cette même file. Plusieurs consommateurs peuvent consommer en parallèle les messages d’une même file.
3.Kafka:
Modèle publication-abonnement : Kafka utilise un modèle publication-abonnement dans lequel les producteurs publient des messages dans des sujets (Topic) précis, puis les consommateurs s’abonnent aux sujets qui les intéressent. Le modèle d’abonnement de Kafka prend en charge plusieurs groupes de consommateurs, chacun pouvant consommer les messages indépendamment, ce qui permet un débit élevé et une mise à l’échelle horizontale.
Modèle de partitionnement:Kafka divise un topic en plusieurs partitions, chacune correspondant physiquement à un fichier journal distinct. Les producteurs envoient les messages à une partition donnée, et les consommateurs peuvent les consommer en parallèle par partition. Ce modèle permet à Kafka de passer à l’échelle horizontalement et d’atteindre un débit élevé.