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.