Redis Vs RabbitMQ als Datenbroker / Messaging-System zwischen Logstash und Elasticsearch

89

Wir definieren eine Architektur, um Protokollinformationen von Logstash-Versendern zu sammeln, die auf verschiedenen Maschinen installiert sind, und die Daten zentral auf einem Elasticsearch-Server zu indizieren und Kibana als grafische Ebene zu verwenden. Wir benötigen ein zuverlässiges Nachrichtensystem zwischen Logstash-Versendern und Elasticsearch, um die Lieferung zu gewährleisten. Welche Faktoren sollten bei der Auswahl von Redis über RabbitMQ als Datenbroker / Messaging-System zwischen Logstash-Versendern und der Elasticsearch oder umgekehrt berücksichtigt werden?

Salindaw
quelle

Antworten:

92

Nachdem ich sowohl Redis als auch RabbitMQ evaluiert hatte, wählte ich RabbitMQ aus folgenden Gründen als unseren Broker:

  1. Mit RabbitMQ können Sie eine integrierte Sicherheitsebene verwenden, indem Sie SSL-Zertifikate verwenden, um die Daten zu verschlüsseln, die Sie an den Broker senden. Dies bedeutet, dass niemand an Ihren Daten riecht und Zugriff auf Ihre wichtigen Organisationsdaten hat.
  2. RabbitMQ ist ein sehr stabiles Produkt, das große Mengen von Ereignissen pro Sekunde und viele Verbindungen verarbeiten kann, ohne der Flaschenhals zu sein.
  3. In unserer Organisation haben wir RabbitMQ bereits verwendet und hatten gute interne Kenntnisse über die Verwendung und eine bereits vorbereitete Integration mit dem Küchenchef.

In Bezug auf die Skalierung verfügt RabbitMQ über eine integrierte Cluster-Implementierung, die Sie zusätzlich zu einem Load Balancer verwenden können, um eine redundante Broker-Umgebung zu implementieren.

Ist mein RabbitMQ-Cluster Aktiv Aktiv oder Aktiv Passiv?

Nun zum schwächeren Punkt der Verwendung von RabbitMQ:

  1. Die meisten Logstash-Versender unterstützen RabbitMQ nicht, aber der beste namens Beaver verfügt über eine Implementierung, die problemlos Daten an RabbitMQ sendet.
  2. Die Implementierung, die Beaver mit RabbitMQ in der aktuellen Version hat, ist (für meine Zwecke) etwas langsam und konnte die Rate von 3000 Ereignissen / Sek. Von einem Server nicht verarbeiten, und von Zeit zu Zeit stürzte der Dienst ab.
  3. Im Moment arbeite ich an einem Fix, der das Leistungsproblem für RabbitMQ löst und den Beaver-Versender stabiler macht. Die erste Lösung besteht darin, mehr Prozesse hinzuzufügen, die gleichzeitig ausgeführt werden können und dem Versender mehr Leistung verleihen. Die zweite Lösung besteht darin, Beaver so zu ändern, dass Daten asynchron an RabbitMQ gesendet werden, was theoretisch viel schneller sein sollte. Ich hoffe, dass ich die Implementierung beider Lösungen bis Ende dieser Woche abschließen werde.

Sie können das Problem hier verfolgen: https://github.com/josegonzalez/python-beaver/issues/323

Überprüfen Sie die Pull-Anfrage hier: https://github.com/josegonzalez/python-beaver/pull/324

Wenn Sie weitere Fragen haben, können Sie gerne einen Kommentar hinterlassen.

Tom Kregenbild
quelle
3
Hat Redis im Vergleich zu RabbitMQ stärkere Punkte? Redis scheint einfacher zu konfigurieren. Und wenn Sie keinen großen Durchsatz benötigen und die Sicherheit auf andere Weise gehandhabt wird, ist RabbitMQ möglicherweise nicht erforderlich. Bitte korrigiere mich wenn ich falsch liege.
Ricardo MS
Sie haben Recht, aber um sicherzugehen, müssen Sie die Leistung zwischen den beiden Produkten vergleichen
Tom Kregenbild
3
"RabbitMQ ist ein sehr stabiles Produkt, das große Mengen von Ereignissen pro Sekunde und viele Verbindungen verarbeiten kann, ohne der Flaschenhals zu sein." - Ich bin mir ziemlich sicher, dass das auch Reddis ist. Dies ist also kein Vorteil von Rabbitmq gegenüber Reddit
Martin Thoma
"Mit RabbitMQ können Sie eine integrierte Sicherheitsschicht mithilfe von SSL verwenden" - erlaubt reddis nicht auch die Verschlüsselung der Transportschicht?
Martin Thoma
2
2019 hat redis noch nicht in TLS eingebaut
jjxtra
52

Redis wird trotz einiger grundlegender Funktionen für den Nachrichtenbroker als Schlüsselwertdatenspeicher erstellt .

RabbitMQ wird als Nachrichtenbroker erstellt. Es hat natürlich viele Message Broker-Funktionen.

Ferhat
quelle
1
Ihre Aussage zu Redis ist mit der Einführung von Stream in Redis 5 nicht genauer. RabbitMQ ist definitiv eine bessere Wahl für große Szenarien. Für ein kleines bis mittleres Szenario (wie es die meisten Projekte auf der Welt sind) ist Redis eine zuverlässige, schnelle und einfach zu konfigurierende Alternative.
Reza
Vielen Dank für das Engagement, es wäre gut, wenn jemand hier seine Erfahrungen über neue Funktionen von Redis schreibt.
Ferhat
44

Ich habe zu diesem Thema recherchiert. Wenn Leistung wichtig ist und Ausdauer nicht, ist RabbitMQ die perfekte Wahl. Redis ist eine Technologie, die mit einer anderen Absicht entwickelt wurde.

Im Folgenden finden Sie eine Liste der Profis für die Verwendung von RabbitMQ über Redis:

  • RabbitMQ verwendet AMQP (Advanced Message Queuing Protocol), das für die Verwendung von SSL, einer zusätzlichen Sicherheitsebene, konfiguriert werden kann.
  • RabbitMQ benötigt ungefähr 75% der Zeit, die Redis zum Akzeptieren von Nachrichten benötigt.
  • RabbitMQ unterstützt Prioritäten für Nachrichten, mit denen Mitarbeiter zuerst Nachrichten mit hoher Priorität verwenden können.
  • Es besteht keine Möglichkeit, die Nachricht zu verlieren, wenn ein Mitarbeiter nach dem Verzehr der Nachricht abstürzt, was bei Redis nicht der Fall ist.
  • RabbitMQ verfügt über ein gutes Routing-System, um Nachrichten an verschiedene Warteschlangen weiterzuleiten.

Einige Nachteile für die Verwendung von RabbitMQ:

  • RabbitMQ ist möglicherweise etwas schwer zu warten und Abstürze zu debuggen.
  • Knotennamen- oder Knoten-IP-Schwankungen können zu Datenverlust führen. Bei guter Verwaltung können jedoch dauerhafte Nachrichten das Problem lösen.
Arun Reddy
quelle
3
Redis verfügt über Sorted Setsprioritätswarteschlangenähnliche Interaktionen. Redis kann auch geclustert / sharded werden, um verschiedene Nachrichten an verschiedene Warteschlangen auf verschiedenen Servern zu senden. Ich bin mir nicht sicher, ob SSL direkt für Redis verfügbar ist, aber ich sehe mir AWS Elasticache an und Redis 3.2.6 ermöglicht die Verschlüsselung im Ruhezustand und während der Übertragung. Hinweis: Redis ist für diesen Fall überhaupt nicht besser. Nur darauf hinzuweisen, ist möglicherweise kein Grund, RabbitMQ Redis vorzuziehen.
Dwanderson
1
Vergessen Sie auch nicht, dass Redis Single-Threaded ist. Wenn Sie also viele Publisher / Konsumenten haben, kann dies ein Problem sein.
Kedare
5

Ich habe mich das Gleiche gefragt. Frühere Empfehlungen der Logstash-Leute empfehlen Redis gegenüber RabbitMQ ( http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized ), obwohl dieser Abschnitt der Notizen in der aktuellen Dokumentation nicht mehr vorhanden ist, obwohl es ihn gibt Allgemeine Hinweise zur Verwendung eines Brokers zur Behandlung von Spikes finden Sie hier https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html .

Während ich RabbitMQ auch recht glücklich benutze, erkunde ich derzeit einen Redis-Broker, da das AMQP-Protokoll für meinen Anwendungsfall der Protokollierung wahrscheinlich zu viel des Guten ist.

opennomad
quelle
2

Schnelle Fragen:

  1. Warum brauchen Sie einen Makler? Wenn Sie logstash oder logstash-forwarder verwenden, um Dateien von diesen Servern zu lesen, werden beide langsamer, wenn die Pipeline überlastet ist.
  2. Haben Sie Erfahrung mit der Verabreichung von Kaninchen oder Redis? Wenn alle Dinge gleich sind, ist das Werkzeug, das Sie verwenden können, das bessere Werkzeug.

Im Bereich der Meinungen habe ich Redis als Broker geführt und es gehasst. Das hätte natürlich meine Unerfahrenheit mit Redis sein können (kein Problem mit dem Produkt selbst), aber es war das schwächste Glied in der Pipeline und scheiterte immer, wenn wir es am meisten brauchten.

Alain Collins
quelle