103 votes

Quelle est la différence entre Apache kafka et ActiveMQ ?

Je travaille sur Apache Kafka . Je veux savoir lequel est le meilleur : Kafka ou ActiveMQ . Quelle est la principale différence entre ces deux technologies ? Je veux mettre en œuvre Kafka dans Spring MVC.

3 votes

Duplicata possible de ActiveMQ ou RabbitMQ ou ZeroMQ ou

84voto

Chris Lam Points 2548

Kafka et ActiveMQ peuvent se recouper, mais ils ont été conçus à l'origine pour des objectifs différents. Les comparer, c'est comme comparer une pomme et une orange.

Kafka

Kafka est un plateforme de streaming distribuée avec une très bonne capacité de mise à l'échelle horizontale. Il permet aux applications de traiter et de retraiter données transmises en continu sur le disque. En raison de son débit élevé, il est couramment utilisé pour la diffusion de données en temps réel.

ActiveMQ

ActiveMQ est un système de courtier en messages qui prend en charge plusieurs protocoles de messagerie tels que AMQP, STOMP, MQTT. Il prend en charge des modèles de routage de messages plus complexes ainsi que le Modèles d'intégration d'entreprise . En général, il est principalement utilisé pour l'intégration entre les applications/services, notamment dans une Architecture orientée services .

13 votes

J'ai d'abord pensé à comparer Apple Inc. avec une orange.

56voto

Ravindra babu Points 5571

L'architecture de Kafka est différente de celle d'ActiveMQ.

Dans Kafka, le producteur va publier des messages dans le topic, qui est un flux de messages d'un type particulier. Le consommateur s'abonne à un ou plusieurs sujets de brokers en extrayant les données.

Principales différences :

  1. Le courtier ActiveMQ devait maintenir l'état de livraison de chaque message, ce qui entraînait une baisse du débit. Producteur Kafka n'attend pas de remerciements du courtier. Le débit global sera élevé si le courtier peut traiter les messages aussi rapidement que le producteur.

  2. Kafka a un un format de stockage plus efficace . En moyenne, chaque message avait une surcharge de 9 octets dans Kafka, contre 144 octets dans ActiveMQ.

  3. ActiveMQ est pousser et Kafka est un système de messagerie basé sur tirer système de messagerie basé sur l'Internet. Dans AcitveMQ, le producteur envoie des messages au courtier et le courtier envoie des messages à tous les consommateurs. Le producteur a la responsabilité de s'assurer que le message a été livré. Dans Kafka, le consommateur tire les messages du courtier à son propre moment. Il est de la responsabilité du consommateur de consommer les messages qu'il est censé consommer.

  4. Les consommateurs lents dans AMQ peuvent causer des problèmes sur les sujets non durables car ils peuvent forcer le courtier à conserver les anciens messages dans la RAM qui, une fois remplie, oblige le courtier à ralentir les producteurs, ce qui entraîne le ralentissement des consommateurs rapides. Un consommateur lent dans Kakfa n'a pas d'impact sur les autres consommateurs.

  5. Dans Kafka - Un consommateur peut rembobiner vers un ancien décalage et de re-consommer les données. C'est utile lorsque vous résolvez un problème et décidez de relire les anciens messages après la résolution du problème.

  6. Les performances des files d'attente et des sujets se dégradent avec l'ajout de consommateurs dans ActiveMQ. Mais Kafka n'a pas ce désavantage avec l'ajout de plus de consommateurs.

  7. Kafka est hautement évolutif grâce à la réplication des partitions. Il peut garantir que les messages sont délivrés dans une séquence avec dans une partition.

  8. ActiveMQ est un système de messagerie traditionnel, tandis que Kakfa est conçu pour les systèmes de traitement distribué avec d'énormes quantités de données et est efficace pour le traitement en continu.

En raison des efficacités ci-dessus, le débit de Kafka est supérieur à celui des systèmes de messagerie normaux comme ActiveMQ et RabbitMQ.

Plus de détails peuvent être lus sur le site notes.stephenholiday.com

1 votes

Quelques clarifications : 1. Jusqu'à ce que la contre-pression se mette en place et que la performance du disque s'égalise à peu près à la même vitesse de production. Kafka est également susceptible d'être plus lent parce qu'il distribue vers les répliques - les chiffres de performance supposent une bande passante constante et une latence très faible vers les répliques.

6 votes

2. ActiveMQ n'utilise pas 70% d'espace disque en plus - c'est manifestement faux.

7 votes

3. Ce n'est pas correct - les consommateurs ActiveMQ tirent des messages

29voto

Kai Wähner Points 936

J'entends cette question chaque semaine... Alors qu'ActiveMQ (comme IBM MQ ou JMS en général) est utilisé pour la messagerie traditionnelle, Apache Kafka est utilisé comme plateforme de streaming (messagerie + stockage distribué + traitement des données). Les deux sont conçus pour des cas d'utilisation différents.

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

L'article " Apache Kafka et Enterprise Service Bus (ESB) - Amis, ennemis ou rivaux ? ( https://www.confluent.io/blog/apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/ )" explique pourquoi Kafka n'est pas concurrent mais complémentaire des solutions d'intégration et de messagerie (notamment ActiveMQ) et comment intégrer les deux.

22voto

Matt Pavlovich Points 2066

Je pense qu'une chose qu'il faut noter dans une discussion sur les courtiers à utiliser (et quand Kafka est évoqué) est que le Benchmark Kafka qui est fréquemment référencé montre la limite supérieure de tout ordinateur distribué moderne. Les courtiers actuels ont tous à peu près la même capacité totale en Mo/s. Kafka se débrouille extrêmement bien avec les petits messages (10-1024 octets) par rapport aux autres courtiers, mais se limite toujours à environ 75 Mb/s (par courtier).

Il y a souvent une comparaison entre des pommes et des oranges, notamment lorsqu'on parle de "clustering". ActiveMQ et d'autres courtiers d'entreprise regroupent la publication des messages et le suivi des abonnements des consommateurs. Kafka regroupe la publication et demande au consommateur de suivre l'abonnement. Cela semble minime, mais la différence est significative.

Tous les brokers ont les mêmes problèmes de contre-pression - Kafka peut faire une "LAZY PERSISTENCE" où le producteur n'attend pas que le broker se synchronise avec le disque c'est bon pour beaucoup de cas d'utilisation, mais probablement pas le scénario "I-care-about-every-single-message" que ppatierno mentionne dans son diaporama.

Kafka est vraiment bon pour la mise à l'échelle horizontale pour des choses comme le traitement de données volumineuses à partir de petits messages. ActiveMQ est plus idéal pour la classe de cas d'utilisation fréquemment appelée messagerie d'entreprise (ce n'est qu'un terme, cela ne signifie pas que Kafka n'est pas bon pour l'entreprise) -- données transactionnelles (bien que Kafka l'ajoute). kiosque. magasin de détail. store and forward. traversée de dmz. publication de centre de données à centre de données. etc.

3 votes

Pouvez-vous dire pourquoi Kafka n'est pas ce qu'il vous faut pour les scénarios "je me soucie de chaque message" ? Les files d'attente de messages où l'on garde la trace de ce que l'on a fait et où l'expéditeur conserve un arriéré de messages qu'il a envoyés pour que le destinataire puisse revenir en arrière, se reconnecter et demander à nouveau les anciens messages sont très fiables, n'est-ce pas ? Et le débit est bien meilleur. Comme ça : cedanet.com.au/ceda/persistent-message-queue.php

1 votes

Le comportement par défaut de "send()" dans l'API Kafka Producer est asynchrone. L'échec du processus alors que les messages sont mis en mémoire tampon entraînera la perte du message. Le basculement d'un cerveau divisé et d'un chef de partition peut également entraîner la perte de messages. Il n'y a pas de solution miracle, mais des avantages et des compromis. En ce qui concerne le fanout côté producteur + la persistance de type JMS, je vote pour la meilleure option de calcul distribué pour ne pas perdre de messages.

0 votes

Pour résoudre la question du débit - produire via plusieurs fils. Le blocage par un seul fil n'est pas toujours "mauvais". Il est fiable et fournit le meilleur maintien disponible de l'ordre des messages. Là encore, il y a des avantages et des inconvénients. Le retour en arrière et le retraitement des récepteurs sont très fiables. Les maux de tête sont (à mon avis) dus au manque d'exemples facilement disponibles sur la façon de le faire le plus efficacement possible, de sorte que les programmeurs novices en matière de messagerie ont souvent du mal à s'y retrouver. L'idempotent / replay a également ses inconvénients et ses problèmes de fiabilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X