ActiveMQ gegen Apollo gegen Kafka

69

Ich habe noch keine Erfahrung mit * MQs und möchte Kenntnisse über JMS und Nachrichtenwarteschlangen im Allgemeinen aufbauen. Auf diese Weise frage ich mich, ob ich mit ActiveMQ beginnen oder es einfach ganz "ignorieren" und mir zunächst Apollo beibringen soll. Ist Apollo so funktionsreich wie ActiveMQ? Implementiert es JMS 2.0 (ich sehe, dass ActiveMQ mit 1.1 hängen geblieben ist)? Vermisse ich etwas wirklich Wichtiges?

Wie vergleicht sich Kafka mit diesen beiden Lösungen?

Martin
quelle
3
Schauen
mjn

Antworten:

104

Apache ActiveMQ ist ein großartiges Arbeitstier voller Funktionen und netter Dinge. Es ist nicht die schnellste MQ-Software, aber schnell genug für die meisten Anwendungsfälle. Zu den Funktionen gehören flexible Clustring, Failover, Integration in verschiedene Anwendungsserver, Sicherheit usw.

Apache Apollo ist ein Versuch, einen neuen Kern für ActiveMQ zu schreiben, um mit einer großen Anzahl von Clients und Nachrichten fertig zu werden. Es hat nicht alle netten und praktischen Funktionen von ActiveMQ, skaliert aber viel besser. Apache Apollo ist eine sehr schnelle MQ-Implementierung, wenn Sie ihm einen großen Multi-Core-Server und Tausende von gleichzeitigen Verbindungen geben. Es hat eine schöne, einfache Benutzeroberfläche, ist aber keine "Einheitslösung".

Es wird anscheinend versucht, eine Reihe von ActiveMQ-Funktionen unter dem Namen ActiveMQ Artemis mit HornetQ zusammenzuführen. HornetQ unterstützt JMS2.0, daher kann ich davon ausgehen, dass es wahrscheinlich in ActiveMQ 6.x angezeigt wird.

JIRA , Github

Kafka ist ein anderes Tier. Es ist ein sehr einfacher Nachrichtenbroker, mit dem persistente Veröffentlichungsabonnements (Themen) so schnell wie möglich über mehrere Server skaliert werden sollen. Für kleine und mittlere Bereitstellungen ist Kafka wahrscheinlich nicht die beste Option. Es hat auch die Möglichkeit, Dinge zu tun, um den hohen Durchsatz zu erreichen. Sie müssen also viel in Bezug auf Flexibilität handeln, um einen hohen verteilten Durchsatz zu erzielen. Wenn Sie neu im Bereich MQ und Broker sind, ist Kafka wohl übertrieben. Auf der anderen Seite - wenn Sie einen Servercluster mit anständiger Größe haben und sich fragen, wie Sie so viele Nachrichten wie möglich durch ihn pushen können - probieren Sie Kafka aus!

Petter Nordlander
quelle
Vielen Dank! Ich denke, dass Apache Apollo in meinem Fall der richtige Weg ist.
Martin
Wenn ich die Beziehung ActiveMQ zu Apollo (teilweise) verstehe (neuere Implementierung basierend auf früheren Erfahrungen usw.), was ist die allgemeine Vision (Ziel, Motivation) von Artemis?
Jacek Cz
12
Apollo konnte sich in gewisser Weise nicht zum neuen nicht blockierenden Kern von AMQ entwickeln, da es an Scala-Programmierern mangelte, die sich diesen Bemühungen widmeten. Die Vision von Artemis, wie ich es sehe - und ich bin kein Beamter von ActiveMQ - ist es, das zu tun, was Apollo nicht getan hat. Bei einem kampferprobten Produkt (HornetQ), das in einer Hauptstromsprache (Java) geschrieben ist, sind die Chancen wahrscheinlich größer als bei einem von Grund auf neu geschriebenen Produkt. Beide zielen auf dasselbe Ziel ab - nicht blockierendes ActiveMQ, um unter anderem neue Anforderungen von IoT- und Mobilitätsanwendungen zu unterstützen
Petter Nordlander
29

Dies ist eine ältere Frage, aber ich werde hier eine modernere Antwort geben.

  • Das Apollo-Projekt ist inoffiziell tot und sie legen nahe, dass Artemis die neue Schärfe ist. ( Link ) Die (scheinbar) ins Stocken geratene Entwicklung von Apollo gibt mir kein Vertrauen in Artemis 'Zukunft.
  • Meine Erfahrung ähnelt Petters Antwort darin, dass ActiveMQ reich an Funktionen und Funktionen ist. Es scheint jedoch, als ob jede Version zufällige Abstürze und Speicherlecks behebt, was kein Vertrauen schafft. Es ist stabil für mein Projekt (das Clustering verwendet), aber wir haben in den letzten rund ein Dutzend Releases (derzeit mit 5.14.3) seltsames Verhalten und Abstürze im Broker festgestellt.
  • Ich habe RabbitMQ nicht verwendet (mein aktuelles Projekt ist an ActiveMQ gebunden), aber ich werde es beim nächsten Projekt ausprobieren, das einen Messaging-Bus benötigt. Wenn das Spülbecken nicht mit zu unterstützenden Funktionen ausgestattet ist, ist es hoffentlich stabiler.

BEARBEITEN: Die Veröffentlichung von 2.3.0 Apache Artemis fand am 5. September 2017 statt. Es scheint also ab sofort Fortschritte zu machen. Aber ( Link- ) Changelog scheint immer noch zu beängstigend.

Matthew B.
quelle
2
FWIW, die Entwicklung auf ActiveMQ Artemis ist jetzt viel aktiver als bei Apollo. Tatsächlich ist die Anzahl der Mitwirkenden an Artemis bereits höher als die von ActiveMQ, zumindest laut GitHub. Artemis wurde auch bereits als Teil von Red Hat JBoss AMQ 7 kommerzialisiert .
Justin Bertram
4

Ich bin ein Leistungsbenchmark von ActiveMQ, Apollo, HornetQ unter einem nicht persistenten Szenario und einem persistenten Szenario. Ich denke, es wird hilfreich für Sie sein, zu entscheiden, welches verwendet werden soll, den Link wie unten gezeigt: http://hiramchirino.com/jms- Benchmark / ubuntu-2600k / index.html

Tommy
quelle
2
Hier ist ein neuerer Benchmark, der mit einer größeren Auswahl an Messaging-Lösungen durchgeführt wurde: softwaremill.com/mqperf . Apollo wurde nicht aufgenommen, da es sich nicht mehr in der aktiven Entwicklung befindet, aber ActiveMQ 5.x und ActiveMQ Artemis sind enthalten.
Justin Bertram
2

Apache Kafka kann als "Distributed Streaming Platform" bezeichnet werden, wobei ActiveMQ , eine MOM (messagingorientierte Middleware), ein "General Purpose Message Broker" ist .

Kafka macht eine Sache und eine Sache wirklich gut: In einer Publish / Subscribe- Architektur (Pub / Sub) werden Nachrichten in Themen (Protokolle, die nach Partitionen verteilt sind) geschrieben, von denen die Verbraucher dann per Offset konsumieren. Kafka, das für die Cloud mit einem sehr hohen Durchsatz entwickelt wurde, konzentriert sich darauf und ist heutzutage die Anlaufstelle für asynchrones Messaging.

ActiveMQ unterstützt sowohl Pub / Sub- als auch Punkt-zu-Punkt- Semantik. In letzterem Fall verarbeitet eine Warteschlange einzelne Nachrichten zwischen einem einzelnen Produzenten und einem bestimmten Konsumenten. Dies ist wie pub / sub asynchron, funktioniert jedoch etwas anders: Wenn ein Verbraucher eine Nachricht in der Warteschlange erhält, diese jedoch nicht bestätigt, wird die Nachricht an einen anderen Verbraucher gesendet. ActiveMQ unterstützt auch verschiedene Messaging-Protokolle, darunter AMQP, STOMP, JMS, CAMEL und MQTT.

Während Apache Kafka die Anlaufstelle für einfache asynchrone Kommunikation sein kann; ActiveMQ scheint von einigen für kompliziertere Routing-Muster wie Unternehmensmuster bevorzugt zu werden. Viele argumentieren jedoch, dass Kafka eine Verbesserung gegenüber ActiveMQ darstellt, beispielsweise aus Gründen eines höheren Durchsatzes , einer effizienteren Verwaltung von Partitionen für Protokolle / Themen und einer feineren Abstimmung ACLs für Verbraucher, die ein Thema konsumieren.

John Hammink
quelle