web-dev-qa-db-fra.com

Y a-t-il une raison d'utiliser RabbitMQ sur Kafka?

On m'a demandé d'évaluer RabbitMQ au lieu de Kafka, mais il était difficile de trouver une raison pour laquelle il fait quelque chose de mieux que Kafka. Est-ce que quelqu'un sait si le débit, la durabilité, la latence ou la facilité d'utilisation sont vraiment meilleurs?

213
Joe

RabbitMQ est un courtier de messages solide à usage général 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 consiste à gérer des tâches en arrière-plan ou à agir en tant que courtier de messages entre microservices. Kafka est un bus de messages optimisé pour les flux de données à forte pénétration et la réexécution.

Kafka peut être considéré comme un courtier de messages durable où les applications peuvent traiter et retraiter les données diffusées sur le disque. Kafka a une approche de routage très simple. RabbitMQ offre de meilleures options si vous devez acheminer vos messages de manière complexe vers vos consommateurs. Utilisez Kafka si vous devez prendre en charge des consommateurs par lots pouvant être hors ligne ou des consommateurs souhaitant recevoir des messages à faible latence.

RabbitMQ conservera tous les états concernant les messages consommés/accusés de réception/non acquittés tandis que Kafka ne suppose pas, il suppose que les consommateurs gardent une trace de ce qui a été consommé et non. 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 temps système - Kafka est conçu pour la conservation et la distribution de grands volumes de messages. (Si vous prévoyez d'avoir de très longues files d'attente dans RabbitMQ, vous pouvez jeter un œil à files d'attente paresseuses .)

Kafka est entièrement conçu pour la mise à l'échelle horizontale (mise à l'échelle en ajoutant plus de machines), tandis que RabbitMQ est principalement conçu pour une mise à l'échelle verticale (mise à l'échelle en ajoutant plus de puissance).

RabbitMQ possède une interface conviviale qui vous permet de surveiller et de gérer votre serveur RabbitMQ à partir d'un navigateur Web. Vous pouvez notamment gérer les files d'attente, les connexions, les canaux, les échanges, les utilisateurs et les autorisations des utilisateurs, les créer, les supprimer et les répertorier dans le navigateur. Vous pouvez ainsi contrôler le débit des messages et envoyer/recevoir des messages manuellement. Le gestionnaire Kafka n'est pas encore aussi développé que l'interface de RabbitMQ Management. Je dirais qu'il est plus facile/plus rapide de bien comprendre RabbitMQ.

Plus de lecture et quelques données de comparaison peuvent être trouvées ici: https://www.cloudkarafka.com/blog/2016-12-05-apachekafka-vs-rabbitmq.html

Nous recommandons également le document de l'industrie: "Kafka versus RabbitMQ: une étude comparative de deux implémentations de publication/abonnement de référence du secteur": http://dl.acm.org/citation.cfm?id=3093908

Je travaille dans une société fournissant à la fois Apache Kafka et RabbitMQ en tant que service.

312
Lovisa Johansson

J'entends cette question chaque semaine ... Alors que RabbitMQ (comme IBM MQ ou JMS ou d'autres solutions de messagerie en général) est utilisé pour la messagerie traditionnelle, Apache Kafka est utilisé comme plate-forme de diffusion en continu (messagerie + stockage distribué + traitement de données). Les deux sont construits pour différents cas d'utilisation.

Vous pouvez utiliser Kafka pour la "messagerie traditionnelle", mais pas utiliser MQ pour les scénarios spécifiques à Kafka.

L'article " Apache Kafka vs Enterprise Service Bus (ESB) - Amis, ennemis ou ennemis? ( https://www.confluent.io/blog/Apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/ ) explique pourquoi Kafka n'est pas compétitive mais complémentaire aux solutions d’intégration et de messagerie (y compris RabbitMQ) et à la manière de les intégrer.

19
Kai Wähner

5 différences majeures entre Kafka et RabbitMQ, client qui les utilise: enter image description here

Quel système de messagerie choisir ou devons-nous changer notre système de messagerie existant?

Il n'y a pas de réponse unique à la question ci-dessus. Une approche possible pour déterminer quand vous devez choisir le système de messagerie ou modifier le système existant consiste à " évaluer la portée et le coût ".

11
Shishir

RabbitMQ est un courtier de messages classique à usage général. Il permet aux serveurs Web de répondre rapidement aux demandes et de transmettre des messages à plusieurs services. Les éditeurs peuvent publier des messages et les rendre disponibles pour les files d’attente, afin que les consommateurs puissent les récupérer. La communication peut être asynchrone ou synchrone.


D'autre part, Apache Kafka n'est pas , mais simplement un courtier de messages. Il a été initialement conçu et mis en œuvre par LinkedIn afin de servir de file d'attente de messages. Depuis 2011, Kafka est une source ouverte qui a rapidement évolué pour devenir une plate-forme de diffusion distribuée, utilisée pour la mise en œuvre de pipelines de données en temps réel et d'applications de diffusion en continu.

Il est évolutif horizontalement, tolérant aux pannes, rapide, et est en production dans des milliers d'entreprises.

Les organisations modernes disposent de divers pipelines de données facilitant la communication entre systèmes ou services. Les choses se compliquent un peu lorsqu'un nombre raisonnable de services doit communiquer en temps réel.

L'architecture devient complexe car diverses intégrations sont nécessaires pour permettre l'intercommunication de ces services. Plus précisément, pour une architecture englobant m services source et n services cibles, n x m intégrations distinctes doivent être écrites. De plus, chaque intégration est livrée avec une spécification différente, ce qui signifie que l'on peut avoir besoin d'un protocole différent (HTTP, TCP, JDBC, etc.) ou d'une représentation de données différente (Binary, Apache Avro, JSON, etc.), ce qui rend les choses encore plus difficiles. . De plus, les services source pourraient faire face à une charge de travail accrue provenant de connexions, susceptible d'avoir un impact sur le temps de latence.

Apache Kafka conduit à des architectures plus simples et gérables, en découplant les pipelines de données. Kafka agit comme un système distribué à haut débit où les services sources envoient des flux de données, les rendant disponibles pour que les services cibles puissent les extraire en temps réel.

De plus, de nombreuses interfaces utilisateur open-source et d'entreprise pour la gestion des clusters Kafka sont maintenant disponibles. Pour plus de détails, reportez-vous à mes articles Vue d'ensemble des outils de surveillance de l'interface utilisateur pour Apache Kafka clusters et Pourquoi Apache Kafka?


La décision de choisir RabbitMQ ou Kafka dépend des exigences de votre projet. En général, si vous voulez un courtier de messages pub/sub simple/traditionnel, optez pour RabbitMQ. Si vous souhaitez créer une architecture pilotée par les événements sur laquelle votre organisation agira en temps réel, optez pour Apache Kafka car il fournit davantage de fonctionnalités pour ce type d'architecture (par exemple Kafka Streams et/ou KSQL).

10

Je vais donner une réponse objective en fonction de mon expérience avec les deux. Je vais également sauter la théorie qui les sous-tend, en supposant que vous la connaissez déjà et/ou que d’autres réponses en ont déjà fourni suffisamment.

RabbitMQ: Je choisirais celui-ci si mes exigences sont assez simples pour gérer la communication du système via des canaux/files d'attente, la conservation et la diffusion en continu n'étant pas une exigence. Par exemple Lorsque le système de fabrication a créé l'actif, il en informe le système des accords pour configurer les contrats, etc.

Kafka: Besoin d’événement en matière d’approvisionnement principalement lorsque vous devez traiter des flux (parfois infinis), une énorme quantité de données bien équilibrées, des décalages de relecture afin d’assurer un état donné, etc. Gardez à l'esprit que cette architecture apporte également plus de complexité, car elle inclut des concepts tels que sujets/partitions/courtiers/messages de désactivation, etc., en tant qu'importance primordiale.

4
irobson

Le seul avantage auquel je peux penser est la fonctionnalité transactionnelle, tout le reste peut être fait en utilisant Kafka

4
RB7

Une différence essentielle que vous avez oubliée est que RabbitMQ est un système de messagerie Push alors que Kafka est un système de messagerie Pull. Ceci est important dans le cas où le système de messagerie doit satisfaire des types de consommateurs différents avec des capacités de traitement différentes. Avec un système basé sur Pull, le consommateur peut consommer en fonction de sa capacité, là où les systèmes Push poussent les messages indépendamment de l'état du consommateur, exposant ainsi le consommateur à un risque élevé.

4
kanishka vatsa

Je sais qu'il est un peu tard et que vous l'avez peut-être déjà dit indirectement, mais encore une fois, Kafka n'est pas du tout une file d'attente, c'est un journal (comme quelqu'un l'a dit ci-dessus, basé sur un sondage).

Pour simplifier, le cas d'utilisation le plus évident pour lequel vous devriez préférer RabbitMQ (ou toute technologie de file d'attente) à Kafka est le suivant:

Vous avez plusieurs consommateurs qui utilisent une file d'attente et chaque fois qu'il y a un nouveau message dans la file d'attente et un consommateur disponible, vous souhaitez que ce message soit traité. Si vous regardez de près le fonctionnement de Kafka, vous remarquerez qu'il ne sait pas comment procéder. En raison de la mise à l'échelle des partitions, vous aurez un consommateur dédié à une partition et vous entrerez dans la famine. problème. Problème qui est facilement évité en utilisant une techno de file d’attente simple. Vous pouvez penser à utiliser un fil qui distribuera les différents messages de la même partition, mais encore une fois, Kafka ne dispose d'aucun mécanisme d'acquittement sélectif.

Le mieux que vous puissiez faire est de faire comme ces gars et d'essayer de transformer Kafka en file d'attente: https://github.com/softwaremill/kmq

Yannick

4
Yannick

Utilisez RabbitMQ quand:

  • Vous n’êtes pas obligé de manipuler Bigdata et vous préférez une interface utilisateur intégrée très pratique pour la surveillance.
  • Pas besoin de files d'attente automatiquement réplicables
  • Pas de multi-abonnés pour les messages- Comme contrairement à Kafka qui est un journal, RabbitMQ est une file d'attente et les messages sont supprimés une fois consommés et l'accusé de réception est arrivé.
  • Si vous avez les conditions requises pour utiliser des caractères génériques et regex pour les messages
  • Si définir la priorité du message est important

En bref: RabbitMQ convient aux cas d'utilisation simples, avec un faible trafic de données, avec l'avantage de la file d'attente prioritaire et des options de routage flexibles. Utilisez Kafka pour des données volumineuses et un débit élevé.

1
Anjali Shyamsundar

Mettre à l'échelle les deux est difficile d'une manière distribuée tolérante aux fautes, mais je dirais que c'est beaucoup plus difficile à grande échelle avec RabbitMQ. Ce n'est pas anodin de comprendre Shovel, Fédération, Files d'attente de messages en miroir, ACK, problèmes de mémoire, surveillance des défaillances, etc. Cela ne veut pas dire que vous n'aurez pas non plus de problèmes spécifiques avec Zookeeper, etc. sur Kafka, mais il y a moins d'éléments mobiles gérer. Cela dit, vous obtenez un échange polyglot avec RMQ, contrairement à Kafka. Si vous voulez diffuser, utilisez Kafka. Si vous voulez un IoT simple ou une livraison de paquets similaire à haut volume, utilisez Kafka. Il s'agit de consommateurs intelligents. Si vous souhaitez une flexibilité des messages et une fiabilité accrue avec des coûts plus élevés et éventuellement une certaine complexité, utilisez RMQ.

1
user3919920