Gibt es einen Grund, RabbitMQ über Kafka zu verwenden?

331

Ich wurde gebeten, RabbitMQ anstelle von Kafka zu evaluieren, aber es fiel mir schwer, einen Grund zu finden, warum es etwas besser macht als Kafka. Weiß jemand, ob es wirklich besser in Bezug auf Durchsatz, Haltbarkeit, Latenz oder Benutzerfreundlichkeit ist?

Joe
quelle
6
In erster Linie meinungsbasiert. Viele gute Fragen generieren ein gewisses Maß an Meinung, basierend auf Expertenerfahrung. Die Antworten auf diese Frage basieren jedoch fast ausschließlich auf Meinungen und nicht auf Fakten, Referenzen oder spezifischem Fachwissen.
VdeX
2
@ Guillaume Das ist nicht unbedingt wahr. Für Kafka stehen Clients für viele Sprachen zur Verfügung: cwiki.apache.org/confluence/display/KAFKA/Clients Darüber hinaus bietet Confluent viele leistungsstarke Open-Source-Kafka-Clients in anderen Sprachen an. Schauen Sie sich das Angebot "Confluent Open Source" an: konfluent.io/product/compare
Matthias J. Sax
3
@ MatthiasJ.Sax Sowohl RabbitMQ als auch kafka haben eine Fülle von Kunden in vielen Sprachen, aber mein Punkt war über offizielle Kunden. In dem Link, den Sie angegeben haben, ist er schwarz auf weiß geschrieben: Wir pflegen alle außer dem JVM-Client außerhalb der Hauptcodebasis . In Bezug auf Confluent bin ich zwar ein großer Benutzer, aber die zusätzlichen Clients sind über die sprachunabhängige Rest-API verfügbar, die zwar ziemlich beeindruckend ist, aber nicht den gleichen Durchsatz wie der offizielle Java-Client hat.
Guillaume
2
@ Guillaume Für "zufällige" Open Source Clients aus der Community stimme ich zu; nicht alles eine hohe Leistung (es ist ziemlich schwer, einen guten Kunden zu schreiben) - deshalb habe ich gesagt: "Das ist nicht unbedingt wahr." ;) Die von Confluent bereitgestellten C / C ++ - und Python-Clients haben jedoch einen hohen Durchsatz und sind genauso effizient wie die AK Java-Clients ...
Matthias J. Sax
Ich würde empfehlen, diesen Blog zu lesen: jack-vanlightly.com/blog/2017/12/4/…
roottraveller

Antworten:

467

RabbitMQ ist ein solider, universeller Nachrichtenbroker , der verschiedene Protokolle wie AMQP, MQTT, STOMP usw. unterstützt. Er kann einen hohen Durchsatz verarbeiten. Ein häufiger Anwendungsfall für RabbitMQ ist die Bearbeitung von Hintergrundjobs oder lang laufenden Aufgaben wie Dateiscannen , Bildskalierung oder PDF-Konvertierung. RabbitMQ wird auch zwischen Microservices verwendet, wo es als Kommunikationsmittel zwischen Anwendungen dient, um Engpässe bei der Nachrichtenübermittlung zu vermeiden.

Kafka ist ein Nachrichtenbus, der für Datenströme und Wiedergabe mit hohem Eingang optimiert ist . Verwenden Sie Kafka, wenn Sie eine große Datenmenge verschieben, Daten in Echtzeit verarbeiten oder Daten über einen bestimmten Zeitraum analysieren müssen. Mit anderen Worten, wo Daten gesammelt, gespeichert und verarbeitet werden müssen. Ein Beispiel ist, wenn Sie die Benutzeraktivität in einem Webshop verfolgen und Kaufvorschläge generieren möchten. Ein weiteres Beispiel ist die Datenanalyse zur Verfolgung, Aufnahme, Protokollierung oder Sicherheit.

Kafka kann als dauerhafter Nachrichtenbroker angesehen werden, bei dem Anwendungen gestreamte Daten auf der Festplatte verarbeiten und erneut verarbeiten können. Kafka hat einen sehr einfachen Routing-Ansatz. RabbitMQ bietet bessere Optionen, wenn Sie Ihre Nachrichten auf komplexe Weise an Ihre Kunden weiterleiten müssen. Verwenden Sie Kafka, wenn Sie Batch-Konsumenten unterstützen möchten, die offline sein könnten, oder Konsumenten, die Nachrichten mit geringer Latenz wünschen. 

Um zu verstehen, wie Daten von Kafka gelesen werden, müssen wir zuerst die Verbraucher und Verbrauchergruppen verstehen. Mit Partitionen können Sie ein Thema parallelisieren, indem Sie die Daten auf mehrere Knoten aufteilen. Jeder Datensatz in einer Partition wird durch seinen eindeutigen Versatz zugewiesen und identifiziert. Dieser Versatz zeigt auf den Datensatz in einer Partition. In der neuesten Version von Kafka verwaltet Kafka einen numerischen Versatz für jeden Datensatz in einer Partition. Ein Verbraucher in Kafka kann entweder automatisch automatisch Offsets festschreiben oder diese festgeschriebene Position manuell steuern. RabbitMQ behält alle Zustände über verbrauchte / bestätigte / nicht bestätigte Nachrichten bei. Ich finde Kafka komplexer zu verstehen als den Fall von RabbitMQ, bei dem die Nachricht einfach aus der Warteschlange entfernt wird, sobald sie bestätigt wurde.

Die Warteschlangen von RabbitMQ sind am schnellsten, wenn sie leer sind, während Kafka große Datenmengen mit sehr geringem Overhead speichert - Kafka wurde zum Speichern und Verteilen großer Nachrichtenmengen entwickelt. (Wenn Sie sehr lange Warteschlangen in RabbitMQ haben möchten, können Sie sich faule Warteschlangen ansehen .)

Kafka wurde von Grund auf mit Blick auf die horizontale Skalierung (Skalieren durch Hinzufügen weiterer Maschinen) entwickelt, während RabbitMQ hauptsächlich für die vertikale Skalierung (Skalieren durch Hinzufügen von mehr Leistung) entwickelt wurde.

RabbitMQ verfügt über eine integrierte benutzerfreundliche Oberfläche, mit der Sie Ihren RabbitMQ-Server über einen Webbrowser überwachen und verwalten können. Unter anderem können Warteschlangen, Verbindungen, Kanäle, Vermittlungsstellen, Benutzer und Benutzerberechtigungen verarbeitet, erstellt, gelöscht und im Browser aufgelistet werden. Sie können die Nachrichtenraten überwachen und Nachrichten manuell senden / empfangen. Kafka verfügt über eine Reihe von Open-Source-Tools und einige kommerzielle Tools, die Verwaltungs- und Überwachungsfunktionen bieten. Ich würde sagen, dass es einfacher / schneller wird, ein gutes Verständnis von RabbitMQ zu bekommen.

Weitere Informationen und Vergleichsdaten finden Sie hier: https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html

Empfehlen Sie auch das Branchenpapier: "Kafka versus RabbitMQ: Eine vergleichende Studie von zwei Implementierungen zum Veröffentlichen / Abonnieren von Branchenreferenzen": http://dl.acm.org/citation.cfm?id=3093908

Ich arbeite in einer Firma, die sowohl Apache Kafka als auch RabbitMQ as a Service anbietet.

Lovisa Johansson
quelle
30
Was bedeutet "High-Ingress"?
Martin Thoma
23
High-Ingress = High-Throughput-Aufnahme
jbustamovej
6
Ich frage Ihren Standpunkt zu RabbitMQ "hauptsächlich für die vertikale Skalierung entwickelt". Wie so ...
Ryan.Bartsch
17
Die horizontale Skalierung (Skalierung durch Hinzufügen weiterer Maschinen) führt in RabbitMQ nicht zu einer besseren Leistung. Die beste Leistung wird erzielt, wenn Sie eine vertikale Skalierung durchführen (Skalierung durch Hinzufügen von mehr Leistung). Ich weiß das, weil ich seit vielen Jahren mit Tausenden von RabbitMQ-Clustern zusammenarbeite. Sie können in Rabbit eine horizontale Skalierung durchführen. Dies bedeutet jedoch, dass Sie auch Clustering zwischen Ihren Knoten einrichten, wodurch die Einrichtung verlangsamt wird. Ich habe einen Leitfaden über bewährte Verfahren für hohe Leistung und hohe Verfügbarkeit in RabbitMQ geschrieben: cloudamqp.com/blog/2017-12-29-part1-rabbitmq-best-practice.html
Lovisa Johansson
4
"... während Kafka dies nicht tut, geht er davon aus, dass der Verbraucher den Überblick darüber behält, was konsumiert wurde und nicht." Das ist falsch. Kafka verfolgt die von jedem einzelnen Verbraucher konsumierten Nachrichten.
Jucardi
36

Ich höre diese Frage jede Woche ... Während RabbitMQ (wie IBM MQ oder JMS oder andere Messaging-Lösungen im Allgemeinen) für traditionelles Messaging verwendet wird, wird Apache Kafka als Streaming-Plattform verwendet (Messaging + verteilter Speicher + Datenverarbeitung). Beide sind für unterschiedliche Anwendungsfälle konzipiert.

Sie können Kafka für "traditionelles Messaging" verwenden, MQ jedoch nicht für Kafka-spezifische Szenarien.

Der Artikel „ Apache Kafka vs. Enterprise Service Bus (ESB) - Freunde, Feinde oder Feinde? ( https://www.confluent.io/blog/apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/ ) “erläutert, warum Kafka nicht wettbewerbsfähig ist, sondern zu Integrations- und Messaging-Lösungen komplementär ist (einschließlich RabbitMQ) und wie man beide integriert.

Kai Wähner
quelle
30

5 Hauptunterschiede zwischen Kafka und RabbitMQ, Kunden, die sie verwenden: Geben Sie hier die Bildbeschreibung ein

Welches Messaging-System soll ich wählen oder sollten wir unser bestehendes Messaging-System ändern?

Es gibt keine Antwort auf die obige Frage. Ein möglicher Ansatz zur Überprüfung , wenn Sie entscheiden, welche Messaging - System oder sollten Sie System ändern vorhandene ist auf „ auswerten Umfang und die Kosten

Shishir
quelle
5
Wo ist Ihre Quelle für diese Informationen? Ich stimme Ihrer Antwort bezüglich der Leistung in RabbitMQ nicht zu - das hängt von der Anzahl der Warteschlangen, Verbindungen usw. ab.
Lovisa Johansson
Richtig. Der durchschnittliche Varianzbereich ist jedoch ähnlich wie oben angegeben. Es gibt Szenarien, in denen es besser oder schlechter als der oben genannte Bereich ist. Siehe Rabbitmq Blog. Die neuesten Datenpunkte haben sich möglicherweise geändert. Rabbitmq.com/blog/2012/04/25/…
Shishir
@Shishir - Könnten Sie weitere Details / Links teilen, die die verschiedenen Arten des Nachrichtenaustauschs erklären - Direkt, Fan-Out, Pub / Sub usw.? Diese klingen hilfreich, um die richtige Messaging-Plattform für bestimmte Anforderungen zu ermitteln. Vielen Dank
Andy Dufresne
@Shishir ein Link von 2012, könnte sich geändert haben, ja.
Lovisa Johansson
@ AndyDufresne, ein bisschen spät, aber hier ist ein Link: cloudamqp.com/blog/…
Lovisa Johansson
28

Ein kritischer Unterschied, den ihr vergessen habt, ist RabbitMQ, ein Push-basiertes Messaging-System, während Kafka ein Pull-basiertes Messaging-System ist. Dies ist wichtig in dem Szenario, in dem das Nachrichtensystem unterschiedliche Verbrauchertypen mit unterschiedlichen Verarbeitungsfunktionen zufriedenstellen muss. Mit einem Pull-basierten System kann der Verbraucher basierend auf seiner Fähigkeit konsumieren, wobei Push-Systeme die Nachrichten unabhängig vom Zustand des Verbrauchers senden, wodurch der Verbraucher einem hohen Risiko ausgesetzt wird.

Kanishka Vatsa
quelle
3
Mit RabbitMQ
Nikolas
16

RabbitMQ ist ein traditioneller Allzweck-Nachrichtenbroker. Es ermöglicht Webservern, schnell auf Anfragen zu reagieren und Nachrichten an mehrere Dienste zu übermitteln. Publisher können Nachrichten veröffentlichen und Warteschlangen zur Verfügung stellen, damit Verbraucher sie abrufen können. Die Kommunikation kann entweder asynchron oder synchron sein.


Andererseits ist Apache Kafka nicht nur ein Nachrichtenbroker. Es wurde ursprünglich von LinkedIn entworfen und implementiert, um als Nachrichtenwarteschlange zu dienen. Seit 2011 ist Kafka Open Source und hat sich schnell zu einer verteilten Streaming-Plattform entwickelt, die für die Implementierung von Echtzeit-Datenpipelines und Streaming-Anwendungen verwendet wird.

Es ist horizontal skalierbar, fehlertolerant, unglaublich schnell und wird in Tausenden von Unternehmen produziert.

Moderne Organisationen verfügen über verschiedene Datenpipelines, die die Kommunikation zwischen Systemen oder Diensten erleichtern. Etwas komplizierter wird es, wenn eine angemessene Anzahl von Diensten in Echtzeit miteinander kommunizieren muss.

Die Architektur wird komplex, da verschiedene Integrationen erforderlich sind, um die Interkommunikation dieser Dienste zu ermöglichen. Genauer gesagt müssen für eine Architektur, die m Quell- und n Zieldienste umfasst, nxm unterschiedliche Integrationen geschrieben werden. Außerdem wird jede Integration mit einer anderen Spezifikation geliefert, was bedeutet, dass möglicherweise ein anderes Protokoll (HTTP, TCP, JDBC usw.) oder eine andere Datendarstellung (Binär, Apache Avro, JSON usw.) erforderlich ist, was die Dinge noch schwieriger macht . Darüber hinaus können Quelldienste die erhöhte Last von Verbindungen beheben, die sich möglicherweise auf die Latenz auswirken können.

Apache Kafka führt zu einfacheren und verwaltbareren Architekturen, indem Datenpipelines entkoppelt werden. Kafka fungiert als verteiltes System mit hohem Durchsatz, bei dem Quelldienste Datenströme übertragen und sie für Zieldienste verfügbar machen, um sie in Echtzeit abzurufen.

Außerdem sind jetzt viele Open Source- und Enterprise-Benutzeroberflächen für die Verwaltung von Kafka-Clustern verfügbar. Weitere Informationen finden Sie in meinen Artikeln Übersicht über UI-Überwachungstools für Apache Kafka-Cluster und Warum Apache Kafka?


Die Entscheidung, ob Sie sich für RabbitMQ oder Kafka entscheiden, hängt von den Anforderungen Ihres Projekts ab. Wenn Sie einen einfachen / traditionellen Pub-Sub-Nachrichtenbroker wünschen, entscheiden Sie sich im Allgemeinen für RabbitMQ. Wenn Sie eine ereignisgesteuerte Architektur erstellen möchten, auf der Ihre Organisation in Echtzeit auf Ereignisse reagiert, wählen Sie Apache Kafka, da es mehr Funktionen für diesen Architekturtyp bietet (z. B. Kafka Streams oder ksqlDB).

Giorgos Myrianthous
quelle
15

Ich weiß, es ist ein bisschen spät und vielleicht haben Sie es bereits indirekt gesagt, aber auch hier ist Kafka überhaupt keine Warteschlange, sondern ein Protokoll (wie oben erwähnt, umfragebasiert).

Um es einfach zu machen, ist der offensichtlichste Anwendungsfall, wenn Sie RabbitMQ (oder einen Warteschlangentechno) Kafka vorziehen sollten, der folgende:

Sie haben mehrere Konsumenten, die aus einer Warteschlange konsumieren. Wenn sich eine neue Nachricht in der Warteschlange befindet und ein Konsument verfügbar ist, soll diese Nachricht verarbeitet werden. Wenn Sie sich die Funktionsweise von Kafka genau ansehen, werden Sie feststellen, dass es nicht weiß, wie das geht. Aufgrund der Partitionsskalierung haben Sie einen Konsumenten, der sich einer Partition widmet, und Sie werden in ein Hungerproblem geraten. Probleme, die durch die Verwendung von einfachem Warteschlangentechno leicht vermieden werden können. Sie können sich vorstellen, einen Thread zu verwenden, der die verschiedenen Nachrichten von derselben Partition versendet, aber auch hier verfügt Kafka über keine selektiven Bestätigungsmechanismen.

Das Beste, was Sie tun können, ist, als diese Leute zu tun und zu versuchen, Kafka als Warteschlange zu verwandeln: https://github.com/softwaremill/kmq

Yannick

Yannick
quelle
9

Ich werde eine objektive Antwort geben, die auf meinen Erfahrungen mit beiden basiert. Ich werde auch die Theorie dahinter überspringen, vorausgesetzt, Sie wissen es bereits und / oder andere Antworten haben bereits genug geliefert.

RabbitMQ : Ich würde dieses auswählen, wenn meine Anforderungen einfach genug sind, um die Systemkommunikation über Kanäle / Warteschlangen zu bewältigen. Aufbewahrung und Streaming sind keine Voraussetzung. Zum Beispiel, wenn das Fertigungssystem das Asset erstellt hat, benachrichtigt es das Vertragssystem, um die Verträge zu konfigurieren und so weiter.

Kafka : Event-Sourcing-Anforderungen hauptsächlich, wenn Sie möglicherweise mit Streams (manchmal unendlich), einer großen Datenmenge auf einmal, die richtig ausgeglichen ist, Offsets wiedergeben müssen, um einen bestimmten Status sicherzustellen, und so weiter. Beachten Sie, dass diese Architektur auch komplexer wird, da sie Konzepte wie Themen / Partitionen / Broker / Tombstone-Nachrichten usw. als erstklassige Bedeutung enthält.

irobson
quelle
9

Verwenden Sie RabbitMQ, wenn:

  • Sie müssen nicht mit Bigdata umgehen und bevorzugen eine praktische integrierte Benutzeroberfläche für die Überwachung
  • Keine automatisch replizierbaren Warteschlangen erforderlich
  • Keine Mehrfachabonnenten für die Nachrichten - Da RabbitMQ im Gegensatz zu Kafka, einem Protokoll, eine Warteschlange ist und Nachrichten entfernt werden, sobald sie verbraucht sind und die Bestätigung eingegangen ist
  • Wenn Sie die Voraussetzungen haben, Platzhalter und Regex für Nachrichten zu verwenden
  • Wenn die Definition der Nachrichtenpriorität wichtig ist

Kurz gesagt: RabbitMQ eignet sich für einfache Anwendungsfälle mit geringem Datenverkehr, mit dem Vorteil einer Prioritätswarteschlange und flexiblen Routingoptionen. Verwenden Sie für massive Daten und hohen Durchsatz Kafka.

Anjali Shyamsundar
quelle
Multi-Abonnenten werden problemlos behandelt, nicht in einer einzelnen Warteschlange, sondern in mehreren und potenziell dynamischen Warteschlangen. Kaninchen ist sicherlich nicht nur für "einfache Anwendungsfälle" gedacht, sondern für ein völlig anderes Paragdim, aber nicht weniger komplex als große Datenmengen, die über lange Zeiträume aufbewahrt werden müssen. Können Sie den Teil mit der Nachrichtenpriorität erweitern?
Owen
4

Der einzige Vorteil, den ich mir vorstellen kann, ist die Transaktionsfunktion. Der Rest kann mit Kafka erledigt werden

RB7
quelle
2
Kafka hat Transaktionen
OneCricketeer
2

Beides zu skalieren ist auf verteilte fehlertolerante Weise schwierig, aber ich würde behaupten, dass es mit RabbitMQ in großem Maßstab viel schwieriger ist. Es ist nicht trivial, Shovel, Federation, Mirrored Msg Queues, ACK, Mem-Probleme, Fehler-Tollerance usw. zu verstehen. Ganz zu schweigen davon, dass Sie auf Kafka keine spezifischen Probleme mit Zookeeper usw. haben, aber es gibt weniger bewegliche Teile, die verwaltet werden müssen. Das heißt, Sie erhalten einen Polyglot-Austausch mit RMQ, den Sie nicht mit Kafka haben. Wenn Sie Streaming möchten, verwenden Sie Kafka. Wenn Sie eine einfache IoT- oder ähnliche Paketzustellung mit hohem Volumen wünschen, verwenden Sie Kafka. Es geht um kluge Verbraucher. Wenn Sie Nachrichtenflexibilität und höhere Zuverlässigkeit mit höheren Kosten und möglicherweise etwas Komplexität wünschen, verwenden Sie RMQ.

user3919920
quelle
Ich stimme nicht zu, wie Sie daraus schließen, dass RMQ "etwas komplex" ist, als ob Kafka weniger komplex wäre.
Cory Robinson
1

Wenn Sie komplexe Routing-Anforderungen haben und eine integrierte Benutzeroberfläche zur Überwachung des Brokers benötigen, ist RabbitMQ möglicherweise am besten für Ihre Anwendung geeignet. Andernfalls ist Kafka wahrscheinlich die bessere Wahl, wenn Sie nach einem Nachrichtenbroker suchen, der einen hohen Durchsatz bewältigt und Zugriff auf den Stream-Verlauf bietet.

Maria Hatfield
quelle
[+1] Gute Erklärung, ich bin sicher, dass Sie sie in Ihren Projekten verwendet haben. Können Sie einige nennen, die beide für die Bereitstellung von Anwendungsnachrichtensystemen verwendet haben?
GingerHead
@GingerHead Wir haben mit einer Radiofirma zusammengearbeitet, die RabbitMQ für ihre GUI und einfache Einrichtung verwendet hat. Für Entwickler war es großartig, den Status ihrer Microservices einfach zu überprüfen. Das gleiche Unternehmen verwendete Kafka auch für Datenströme mit hohem Datenvolumen, für die eine Aufbewahrungszeit von mehr als drei Tagen erforderlich war. Wenn Sie mehr über die Unterschiede zwischen den beiden Technologien lesen möchten, finden Sie hier einen Artikel, den ich zum Thema geschrieben habe: Kafka vs. RabbitMQ-Artikel .
Maria Hatfield
0

Apache Kafka ist eine beliebte Wahl für die Stromversorgung von Datenpipelines. Apache kafka hat kafka stream hinzugefügt, um beliebte etl-Anwendungsfälle zu unterstützen. KSQL macht es einfach, Daten innerhalb der Pipeline zu transformieren und Nachrichten darauf vorzubereiten, sauber in einem anderen System zu landen. KSQL ist die Streaming-SQL-Engine für Apache Kafka. Es bietet eine benutzerfreundliche und dennoch leistungsstarke interaktive SQL-Schnittstelle für die Stream-Verarbeitung auf Kafka, ohne dass Code in einer Programmiersprache wie Java oder Python geschrieben werden muss. KSQL ist skalierbar, elastisch, fehlertolerant und in Echtzeit. Es unterstützt eine breite Palette von Streaming-Vorgängen, einschließlich Datenfilterung, Transformationen, Aggregationen, Verknüpfungen, Fensterung und Sitzungsverwaltung.

https://docs.confluent.io/current/ksql/docs/index.html

Rabbitmq ist keine beliebte Wahl für etl-Systeme, sondern für Systeme, für die einfache Messagingsysteme mit geringerem Durchsatz erforderlich sind.

Salona Sinha
quelle
0

Mir ist klar, dass dies eine alte Frage ist, aber ein Szenario, in dem RabbitMQ die bessere Wahl sein könnte, ist die Datenredaktion.

Bei RabbitMQ wird die Nachricht standardmäßig gelöscht, sobald sie verbraucht wurde. Bei Kafka werden Nachrichten standardmäßig eine Woche lang aufbewahrt. Es ist üblich, dies auf eine viel längere Zeit einzustellen oder sie sogar nie zu löschen.

Während beide Produkte so konfiguriert werden können, dass Nachrichten beibehalten (oder nicht beibehalten) werden, würde ich mich für RabbitMQ entscheiden, wenn die Einhaltung von CCPA oder GDPR ein Problem darstellt.

Merkle Groot
quelle
0

Kafka ist in Bezug auf Durchsatz, Haltbarkeit und Latenz besser als RabbitMQ. Wenn Sie weniger als 10.000 Transaktionen pro Sekunde erwarten, können Sie sich für RabbitMQ entscheiden, aber auch das hängt von Ihrer Implementierung ab.

Ich habe Kafka in unser Produkt implementiert, in dem wir Transaktionen mit mehr als 70.000 / s abwickelten und die Latenz durchschnittlich 15 ms betrug, wobei nur wenige Spitzen bis zu 40 ms erreichten. Die Themengröße betrug 100 KB.

PFB mehr Datenpunkte zu KAFKA und RabbitMQ: Apache Kafka enthält den Broker selbst, der eigentlich der bekannteste und beliebteste Teil davon ist und für Stream-Verarbeitungsszenarien entwickelt und prominent vermarktet wurde. Darüber hinaus hat Apache Kafka kürzlich Kafka Streams hinzugefügt, die sich als Alternative zu Streaming-Plattformen wie Apache Spark, Apache Flink, Apache Beam / Google Cloud-Datenfluss und Spring Cloud-Datenfluss positionieren. In der Dokumentation werden häufig verwendete Anwendungsfälle wie Website-Aktivitäts-Tracking, Metriken, Protokollaggregation, Stream-Verarbeitung, Ereignisbeschaffung und Festschreibungsprotokolle erläutert. Einer dieser beschriebenen Anwendungsfälle ist das Versenden von Nachrichten, was zu Verwirrung führen kann. Packen wir das also ein wenig aus und erhalten Klarheit darüber, für welche Messaging-Szenarien Kafka am besten geeignet ist, z.

Stream von A nach B ohne komplexes Routing mit maximalem Durchsatz (100k / s +), mindestens einmal in partitionierter Reihenfolge geliefert. Wenn Ihre Anwendung Zugriff auf den Stream-Verlauf benötigt, der mindestens einmal in partitionierter Reihenfolge bereitgestellt wird. Kafka ist ein dauerhafter Nachrichtenspeicher, und Kunden können bei Bedarf eine „Wiederholung“ des Ereignisstroms erhalten, im Gegensatz zu herkömmlichen Nachrichtenbrokern, bei denen eine Nachricht nach der Zustellung aus der Warteschlange entfernt wird. Stream Processing Event Sourcing RabbitMQ ist eine universelle Messaging-Lösung, mit der Webserver häufig schnell auf Anforderungen reagieren können, anstatt ressourcenintensive Verfahren ausführen zu müssen, während der Benutzer auf das Ergebnis wartet. Es ist auch gut geeignet, um eine Nachricht zum Verbrauch an mehrere Empfänger zu verteilen oder um die Last zwischen Arbeitnehmern unter hoher Last (20.000 + / s) auszugleichen. Wenn Ihre Anforderungen über den Durchsatz hinausgehen, hat RabbitMQ viel zu bieten: Funktionen für zuverlässige Bereitstellung, Routing, Verbund, HA, Sicherheit, Verwaltungstools und andere Funktionen. Lassen Sie uns einige Szenarien untersuchen, die für RabbitMQ am besten geeignet sind:

Ihre Anwendung muss mit einer beliebigen Kombination vorhandener Protokolle wie AMQP 0-9-1, STOMP, MQTT, AMQP 1.0 funktionieren. Sie benötigen eine detailliertere Konsistenzkontrolle / -garantie pro Nachricht (Warteschlangen für nicht zustellbare Nachrichten usw.). Kafka hat jedoch kürzlich eine bessere Unterstützung für Transaktionen hinzugefügt. Ihre Anwendung benötigt eine Vielzahl von Punkt-zu-Punkt-, Anforderungs- / Antwort- und Veröffentlichungs- / Abonnement-Nachrichten. Komplexes Routing für Verbraucher, Integration mehrerer Dienste / Apps in nicht triviale Routing-Logik RabbitMQ kann auch mehrere der oben genannten starken Anwendungsfälle von Kafka effektiv angehen Hilfe von zusätzlicher Software. RabbitMQ wird häufig mit Apache Cassandra verwendet, wenn die Anwendung Zugriff auf den Stream-Verlauf benötigt, oder mit dem LevelDB-Plugin für Anwendungen, die eine „unendliche“ Warteschlange benötigen, aber keine der beiden Funktionen wird mit RabbitMQ selbst ausgeliefert.

Abhijeet
quelle
0

Die kurze Antwort lautet "Nachrichtenbestätigungen". RabbitMQ kann so konfiguriert werden, dass Nachrichtenbestätigungen erforderlich sind. Wenn ein Empfänger ausfällt, wird die Nachricht wieder in die Warteschlange gestellt und ein anderer Empfänger kann es erneut versuchen. Während Sie dies in Kafka mit Ihrem eigenen Code erreichen können, funktioniert es sofort mit RabbitMQ.

Nach meiner Erfahrung sind Kafka und KSql die beste Wahl, wenn Sie eine Anwendung haben, die Anforderungen zum Abfragen eines Informationsstroms hat. Wenn Sie ein Warteschlangensystem wünschen, sind Sie mit RabbitMQ besser dran.

GlennSills
quelle
0

Die am häufigsten gewählte Antwort deckt den größten Teil ab, aber ich möchte den Standpunkt des Anwendungsfalls hervorheben. Kann Kafka das tun, was Kaninchen mq kann? Die Antwort lautet ja, aber kann Kaninchen mq alles tun, was Kafka tut? Die Antwort lautet nein. Also, was ist das, was Kaninchen mq nicht kann, was Kafka auszeichnet, das ist verteilte Nachrichtenverarbeitung. Lesen Sie jetzt die am häufigsten gewählte Antwort zurück und es wird sinnvoller. Nehmen Sie einen Anwendungsfall, in dem Sie ein Messaging-System mit einem super hohen Durchsatz erstellen müssen, z. B. "Gefällt mir" in Facebook, und Sie haben dafür Kaninchen-mq ausgewählt. Sie haben einen Austausch und eine Warteschlange sowie einen Consumer erstellt, in dem alle Publisher (in diesem Fall FB-Benutzer) Likes-Nachrichten veröffentlichen können. Da Ihr Durchsatz hoch ist, Sie erstellen im Consumer mehrere Threads, um Nachrichten parallel zu verarbeiten, sind jedoch weiterhin an die Hardwarekapazität des Computers gebunden, auf dem der Consumer ausgeführt wird. Angenommen, ein Verbraucher reicht nicht aus, um alle Nachrichten zu verarbeiten - was würden Sie tun? Können Sie der Warteschlange einen weiteren Verbraucher hinzufügen? Nein, das können Sie nicht. Können Sie eine neue Warteschlange erstellen und diese Warteschlange an den Austausch binden, in dem die Likes-Nachricht veröffentlicht wird? Die Antwort ist kein Grund, warum Nachrichten zweimal verarbeitet werden. Das ist das Kernproblem, das Kafka löst. Sie können damit verteilte Partitionen (Queue in rabbit mq) und verteilte Consumer erstellen, die miteinander kommunizieren. Dadurch wird sichergestellt, dass Ihre Nachrichten in einem Thema Prozesse von Verbrauchern erhalten, die auf verschiedenen Knoten (Maschinen) verteilt sind. Kafka-Broker stellen sicher, dass Nachrichten über alle Partitionen dieses Themas verteilt werden. Verbrauchergruppen stellen sicher, dass alle Verbraucher miteinander sprechen und die Nachricht nicht zweimal verarbeitet wird. Im wirklichen Leben werden Sie jedoch nicht mit diesem Problem konfrontiert sein, es sei denn, Ihr Durchsatz ist ernsthaft hoch, da rabbit mq Daten auch mit einem Verbraucher sehr schnell verarbeiten kann.

Amit Sharma
quelle