Apache Kafka gegen Apache Storm

102

Apache Kafka: Verteiltes Nachrichtensystem
Apache Storm: Echtzeit-Nachrichtenverarbeitung

Wie können wir beide Technologien in einer Echtzeitdatenpipeline zur Verarbeitung von Ereignisdaten verwenden?

In Bezug auf die Echtzeit-Datenpipeline scheinen mir beide den Job identisch zu machen. Wie können wir beide Technologien in einer Datenpipeline verwenden?

Ananth Duari
quelle

Antworten:

158

Sie verwenden Apache Kafka als verteilte und robuste Warteschlange, die Daten mit hohem Datenvolumen verarbeiten kann und es Ihnen ermöglicht, Nachrichten von einem Endpunkt an einen anderen zu übergeben.

Sturm ist keine Warteschlange. Es handelt sich um ein System mit verteilten Echtzeitverarbeitungsfunktionen, sodass Sie alle Arten von Manipulationen an Echtzeitdaten parallel ausführen können.

Der gemeinsame Ablauf dieser Tools (wie ich ihn kenne) sieht wie folgt aus:

Echtzeitsystem -> Kafka -> Storm -> NoSql -> BI (optional)

Sie haben also Ihre Echtzeit-App, die Daten mit hohem Datenvolumen verarbeitet und an die Kafka-Warteschlange sendet. Storm zieht die Daten aus Kafka und führt einige erforderliche Manipulationen durch. An diesem Punkt möchten Sie normalerweise einige Vorteile aus diesen Daten ziehen, sodass Sie sie entweder für zusätzliche BI-Berechnungen an eine Nosql-Datenbank senden oder diese NoSql einfach von einem anderen System abfragen können.

Forhas
quelle
Danke Forhas. Das ist sehr hilfreich. Eine Frage: Können wir Apache Kafka verwenden, um Apache-Protokolldateien zu aggregieren, oder benötigen wir dafür noch Flume?
Ananth Duari
Ich denke, Sie können, obwohl ich mit einem solchen Fluss nicht vertraut bin. Vielleicht können Sie Splunk auf Ihre Bedürfnisse überprüfen (nur eine Vermutung ..).
Forhas
Ich empfehle GrayLog zu verwenden und es mit Apache Kafka zu verbinden. GrayLog hat bereits ein Kakfa-Eingangs-Plugin.
Saeid Rastak
36

Kafka und Storm haben einen etwas anderen Zweck:

Kafka ist ein verteilter Nachrichtenbroker, der eine große Anzahl von Nachrichten pro Sekunde verarbeiten kann. Es verwendet das Publish-Subscribe-Paradigma und stützt sich auf Themen und Partitionen. Kafka verwendet Zookeeper, um den Status zwischen Brokern zu teilen und zu speichern. Kafka ist also grundsätzlich für die Übertragung von Nachrichten von einem Computer auf einen anderen verantwortlich.

Storm ist ein skalierbares, fehlertolerantes Echtzeit-Analysesystem (denken Sie wie Hadoop in Echtzeit). Es verbraucht Daten aus Quellen (Ausläufen) und leitet sie an die Pipeline (Bolts) weiter. Sie können sie in der Topologie kombinieren. Storm ist also im Grunde eine Recheneinheit (Aggregation, maschinelles Lernen).


Sie können sie jedoch zusammen verwenden: Ihre Anwendung verwendet beispielsweise kafka, um Daten an andere Server zu senden, die Storm verwenden, um einige Berechnungen daran durchzuführen.

Salvador Dali
quelle
32

Ich weiß, dass dies ein älterer Thread ist und die Vergleiche von Apache Kafka und Storm gültig und korrekt waren, als sie geschrieben wurden, aber es ist erwähnenswert, dass sich Apache Kafka im Laufe der Jahre stark weiterentwickelt hat und seit Version 0.10 (April 2016) Kafka enthalten hat Eine Kafka Streams-API, die Stream-Verarbeitungsfunktionen bietet, ohne dass zusätzliche Software wie Storm erforderlich ist. Kafka enthält auch die Connect-API für die Verbindung mit verschiedenen Datenquellen und -senken (-zielen).

Ankündigungsblog - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

Aktuelle Apache-Dokumentation - https://kafka.apache.org/documentation/streams/

In 0.11 Kafka wurde die Stream-Verarbeitungsfunktionalität weiter erweitert, um genau einmalige Semantik und Transaktionen bereitzustellen.

https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/

Hans Jespersen
quelle
1
Im Grunde genommen kommuniziert jetzt ein Echtzeitsystem direkt mit Kafkaas den Endpunkt und Kafka speichert zB an eine DB?
Problemoffizier
2
Ja, jetzt enthält Kafka Kafka Connect, um mit Datenbanken und anderen Datenquellen (Syslog, JMS, Protokolldateien usw.) zu kommunizieren, und Kafka Streams, um die Stream-Verarbeitung durchzuführen (Joins, Transformationen, Filter, Aggregationen), und zurück zu Kafka Connect, um zu schreiben in eine andere Datenbank oder ein anderes Repository.
Hans Jespersen
15

So funktioniert es

Kafka - Um einen Echtzeit-Stream bereitzustellen

Sturm - Um einige Operationen an diesem Stream durchzuführen

Sie können sich das GitHub-Projekt ansehen https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js ist eine Grafikdarstellungsbibliothek)

Idealfall:

Realtime application -> Kafka -> Storm -> NoSQL -> d3js

Dieses Repository basiert auf:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js
Abhishek Goel
quelle
1
Abhishek, der in der obigen Antwort erwähnte Link ist unterbrochen. Können Sie bitte den Link aktualisieren?
Abhijit Gaikwad
4

Wie jeder Ihnen erklärt, ist Apache Kafka: eine kontinuierliche Messaging-Warteschlange

Apache Storm: ist ein kontinuierliches Verarbeitungswerkzeug

Hier in diesem Aspekt erhält Kafka die Daten von jeder Website wie FB, Twitter mithilfe von APIs. Diese Daten werden mithilfe von Apache Storm verarbeitet, und Sie können die verarbeiteten Daten in einer beliebigen Datenbank speichern.

https://github.com/miguno/kafka-storm-starter

Folgen Sie ihm einfach, Sie werden eine Vorstellung davon bekommen

Syed Jameser
quelle
3

Wenn ich einen Anwendungsfall habe, bei dem ich Muster visualisieren oder alarmieren muss (denken Sie an Twitter-Trends), während ich die Ereignisse weiter verarbeite, habe ich mehrere Muster.
Mit NiFi könnte ich ein Ereignis verarbeiten und einen persistenten Datenspeicher mit geringer (er) Stapelaggregation mit sehr, sehr wenig benutzerdefinierter Codierung aktualisieren.
Storm (viele benutzerdefinierte Codierungen) ermöglicht mir den Zugriff auf die Trendereignisse nahezu in Echtzeit.
Wenn ich viele Sekunden warten kann, kann ich aus kafka in hdfs (Parkett) stapeln und verarbeiten.
Wenn ich es in Sekunden wissen muss, brauche ich NiFi und wahrscheinlich sogar Storm. (Denken Sie daran, Tausende von Bodenstationen zu überwachen, bei denen ich die Wetterbedingungen in kleinen Regionen für Tornado-Warnungen sehen muss.)

Daemeon
quelle