RabbitMQ est un courtier de messages solide et polyvalent qui prend en charge plusieurs protocoles tels que AMQP, MQTT, STOMP, etc. Il peut gérer un débit élevé. Un cas d'utilisation courant de RabbitMQ est de gérer des tâches d'arrière-plan ou des tâches longues, telles que la numérisation de fichiers, le redimensionnement d'images ou la conversion de PDF. RabbitMQ est également utilisé entre microservices, où il sert de moyen de communication entre applications, évitant les goulots d'étranglement en transmettant des messages.
Kafka est un bus de messages optimisé pour l'ingestion de flux de données à haut débit et la relecture. Utilisez Kafka lorsque vous avez besoin de déplacer une grande quantité de données, de traiter des données en temps réel ou d'analyser des données sur une période. En d'autres termes, là où les données doivent être collectées, stockées et traitées. Un exemple est lorsque vous souhaitez suivre l'activité des utilisateurs sur une boutique en ligne et générer des articles suggérés à acheter. Un autre exemple est l'analyse des données pour le suivi, l'ingestion, l'enregistrement ou la sécurité.
Kafka peut être vu comme un courtier de messages durable où les applications peuvent traiter et retraiter des données en flux sur le disque. Kafka a une approche de routage très simple. RabbitMQ offre de meilleures options si vous devez router vos messages de manière complexe vers vos consommateurs. Utilisez Kafka si vous avez besoin de prendre en charge des consommateurs en lots qui pourraient être hors ligne ou des consommateurs qui souhaitent recevoir des messages avec une faible latence.
Pour comprendre comment lire les données de Kafka, nous devons d'abord comprendre ses consommateurs et groupes de consommateurs. Les partitions vous permettent de paralléliser un sujet en divisant les données sur plusieurs nœuds. Chaque enregistrement dans une partition est affecté et identifié par son décalage unique. Cet décalage pointe vers l'enregistrement dans une partition. Dans la dernière version de Kafka, Kafka conserve un décalage numérique pour chaque enregistrement dans une partition. Un consommateur dans Kafka peut soit commettre automatiquement des décalages périodiquement, soit choisir de contrôler manuellement cette position engagée. RabbitMQ garde tous les états des messages consommés/acquittés/non acquittés. Je trouve Kafka plus complexe à comprendre que dans le cas de RabbitMQ, où le message est simplement supprimé de la file une fois qu'il est accusé de réception.
Les files d'attente de RabbitMQ sont les plus rapides lorsqu'elles sont vides, tandis que Kafka conserve de grandes quantités de données avec très peu de surcharge - Kafka est conçu pour contenir et distribuer de grands volumes de messages. (Si vous prévoyez d'avoir de très longues files d'attente dans RabbitMQ, vous pourriez jeter un œil aux files d'attente paresseuses.)
Kafka est conçu dès le départ avec le scaling horizontal (échelle en ajoutant plus de machines) à l'esprit, tandis que RabbitMQ est principalement conçu pour le scaling vertical (échelle en ajoutant plus de puissance).
RabbitMQ dispose d'une interface conviviale intégrée qui vous permet de surveiller et de gérer votre serveur RabbitMQ à partir d'un navigateur web. Entre autres choses, les files d'attente, les connexions, les canaux, les échanges, les utilisateurs et les autorisations d'utilisateur peuvent être gérés - créés, supprimés et répertoriés dans le navigateur et vous pouvez surveiller les taux de messages et envoyer/recevoir des messages manuellement. Kafka dispose d'un certain nombre d'outils open-source et également commerciaux, offrant les fonctionnalités d'administration et de surveillance. Je dirais qu'il est plus facile/développe plus rapidement une bonne compréhension de RabbitMQ.
En général, si vous voulez un courtier de messages pub-sub simple/traditionnel, le choix évident est RabbitMQ, car il va probablement évoluer plus que ce dont vous aurez jamais besoin. J'aurais choisi RabbitMQ si mes exigences étaient assez simples pour traiter la communication système à travers des canaux/files d'attente, et où la rétention et le streaming ne sont pas requis.
Il y a deux situations principales où je choisirais RabbitMQ ; Pour des tâches longues, lorsque j'ai besoin d'exécuter des tâches d'arrière-plan fiables. Et pour la communication et l'intégration à l'intérieur et entre les applications, c'est-à-dire comme intermédiaire entre les microservices; où un système doit simplement notifier une autre partie du système de commencer à travailler sur une tâche, comme la gestion des commandes dans une boutique en ligne (commande passée, mise à jour du statut de la commande, envoi de la commande, paiement, etc.).
En général, si vous voulez un cadre pour stocker, lire (re-lire) et analyser des données en continu, utilisez Apache Kafka. Il est idéal pour les systèmes qui sont audités ou ceux qui ont besoin de stocker des messages de manière permanente. Ceux-ci peuvent également être décomposés en deux cas d'utilisation principaux pour l'analyse de données (suivi, ingestion, journalisation, sécurité, etc.) ou le traitement en temps réel.
Vous trouverez plus de lectures, de cas d'utilisation et quelques données de comparaison ici : https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html
Je recommande également le document de l'industrie : "Kafka versus RabbitMQ : Une étude comparative de deux implémentations de référence de l'industrie sur la publication/abonnement" : http://dl.acm.org/citation.cfm?id=3093908
Je travaille dans une entreprise proposant à la fois Apache Kafka et RabbitMQ en tant que service.
12 votes
Basé principalement sur l'opinion, De nombreuses bonnes questions génèrent un certain degré d'opinion basé sur l'expérience d'experts, mais les réponses à cette question auront tendance à être presque entièrement basées sur des opinions, plutôt que des faits, des références ou une expertise spécifique.
3 votes
@Guillaume Ce n'est pas nécessairement vrai. Il existe des clients pour de nombreuses langues disponibles pour Kafka: cwiki.apache.org/confluence/display/KAFKA/Clients De plus, Confluent propose de nombreux clients Kafka open source très performants dans d'autres langues. Consultez l'offre "Confluent Open Source" ici : confluent.io/product/compare
3 votes
@MatthiasJ.Sax Tant RabbitMQ que Kafka ont une multitude de clients dans de nombreux langages, mais mon point portait sur les clients officiels. Dans le lien que vous avez donné, il est écrit noir sur blanc : nous maintenons tous les clients sauf celui en jvm en dehors de la base de code principale. En ce qui concerne Confluent, je suis effectivement un gros utilisateur, mais les clients supplémentaires passent par l'API REST agnostique du langage, qui bien que très impressionnante n'a pas le même débit que le client Java officiel.
3 votes
@Guillaume Pour les clients open source "aléatoires" de la communauté, je suis d'accord; ils ne sont pas tous performants (il est assez difficile d'écrire un bon client) -- c'est pourquoi j'ai mis "Ce n'est pas forcément vrai." ;) Cependant, les clients C/C++ et Python fournis par Confluent ont un débit élevé et sont aussi efficaces que les clients Java AK...
4 votes
Je recommanderais de lire ce blog: jack-vanlightly.com/blog/2017/12/4/…
0 votes
Le blog partagé de @roottraveller vaut la peine d'être lu. N'hésitez pas à le consulter.