Apache Kafka contre Apache Storm

102

Apache Kafka: système de messagerie distribuée
Apache Storm: traitement des messages en temps réel

Comment pouvons-nous utiliser les deux technologies dans un pipeline de données en temps réel pour le traitement des données d'événements?

En termes de pipeline de données en temps réel, les deux me semblent faire le même travail. Comment pouvons-nous utiliser les deux technologies sur un pipeline de données?

Ananth Duari
la source

Réponses:

158

Vous utilisez Apache Kafka comme une file d'attente distribuée et robuste qui peut gérer des données à volume élevé et vous permet de transmettre des messages d'un point de terminaison à un autre.

Storm n'est pas une file d'attente. C'est un système qui a distribué des capacités de traitement en temps réel, ce qui signifie que vous pouvez exécuter toutes sortes de manipulations sur des données en temps réel en parallèle.

Le flux commun de ces outils (tel que je le connais) est le suivant:

système en temps réel -> Kafka -> Storm -> NoSql -> BI (facultatif)

Ainsi, votre application en temps réel gère des données à volume élevé et les envoie à la file d'attente Kafka. Storm extrait les données de kafka et applique certaines manipulations requises. À ce stade, vous souhaitez généralement tirer parti de ces données.Vous pouvez donc soit les envoyer à une base de données Nosql pour des calculs BI supplémentaires, soit simplement interroger ce NoSql à partir de n'importe quel autre système.

forhas
la source
Merci Forhas. C'est très utile. Une question peut-on utiliser Apache Kafka pour agréger les fichiers journaux Apache ou avons-nous encore besoin de Flume pour le faire?
Ananth Duari
Je suppose que vous pouvez bien que je ne connaisse pas un tel flux. Peut-être que vous pouvez vérifier Splunk pour vos besoins (juste une supposition ..).
Forhas
Je recommande d'utiliser GrayLog et de le connecter à apache kafka. GrayLog a déjà un plugin d'entrée kakfa.
saeid rastak le
36

Kafka et Storm ont un objectif légèrement différent:

Kafka est un courtier de messages distribués qui peut gérer une grande quantité de messages par seconde. Il utilise le paradigme de publication-abonnement et repose sur des sujets et des partitions. Kafka utilise Zookeeper pour partager et enregistrer l'état entre les courtiers. Donc Kafka est essentiellement responsable du transfert des messages d'une machine à une autre.

Storm est un système analytique en temps réel évolutif, tolérant aux pannes (pensez comme Hadoop en temps réel). Il consomme les données des sources (Spouts) et les transmet au pipeline (Bolts). Vous pouvez les combiner dans la topologie. Donc Storm est essentiellement une unité de calcul (agrégation, machine learning).


Mais vous pouvez les utiliser ensemble: par exemple, votre application utilise kafka pour envoyer des données à d'autres serveurs qui utilise storm pour effectuer des calculs dessus.

Salvador Dali
la source
32

Je sais qu'il s'agit d'un fil de discussion plus ancien et que les comparaisons entre Apache Kafka et Storm étaient valides et correctes lorsqu'elles ont été écrites mais il convient de noter qu'Apache Kafka a beaucoup évolué au fil des ans et depuis la version 0.10 (avril 2016) Kafka a inclus une API Kafka Streams qui fournit des capacités de traitement de flux sans avoir besoin de logiciel supplémentaire tel que Storm. Kafka inclut également l'API Connect pour se connecter à diverses sources et récepteurs (destinations) de données.

Blog d'annonce - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

Documentation Apache actuelle - https://kafka.apache.org/documentation/streams/

Dans la version 0.11 Kafka, la fonctionnalité de traitement de flux a été encore étendue pour fournir une sémantique et des transactions Exactly Once.

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

Hans Jespersen
la source
1
Donc, fondamentalement maintenant, un système en temps réel communique directement avec Kafka comme point final et Kafka stocke par exemple vers une base de données?
problemofficer
2
Oui maintenant Kafka inclut Kafka Connect pour parler aux bases de données et autres sources de données (syslog, JMS, fichiers journaux, etc.), et Kafka Streams pour effectuer le traitement du flux (jointures, transformations, filtres, agrégations), et retour à Kafka Connect pour écrire vers une autre base de données ou référentiel.
Hans Jespersen
15

Voilà comment cela fonctionne

Kafka - Pour fournir un flux en temps réel

Storm - Pour effectuer certaines opérations sur ce flux

Vous pouvez jeter un œil au projet GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js est une bibliothèque de représentation graphique)

Cas idéal:

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

Ce référentiel est basé sur:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js
Abhishek Goel
la source
1
Abhishek, le lien mentionné dans la réponse ci-dessus est rompu. Pouvez-vous mettre à jour le lien?
Abhijit Gaikwad
4

Comme tout le monde vous explique qu'Apache Kafka: est une file d'attente de messagerie continue

Apache Storm: est un outil de traitement continu

ici, dans cet aspect, Kafka obtiendra les données de n'importe quel site Web comme FB, Twitter en utilisant des API et ces données sont traitées à l'aide d'Apache Storm et vous pouvez stocker les données traitées dans les bases de données de votre choix.

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

Suivez-le, vous aurez une idée

syed jameer
la source
3

Quand j'ai un cas d'utilisation qui me demande de visualiser ou d'alerter sur des modèles (pensez aux tendances Twitter), tout en continuant à traiter les événements, j'ai plusieurs modèles.
NiFi me permettrait de traiter un événement et de mettre à jour un magasin de données persistant avec une agrégation de lots faible (plus) avec très, très peu de codage personnalisé.
Storm (beaucoup de codage personnalisé) me permet d'accéder presque en temps réel aux événements de tendance.
Si je peux attendre plusieurs secondes, alors je peux sortir de kafka, dans hdfs (Parquet) et traiter.
Si j'ai besoin de savoir en quelques secondes, j'ai besoin de NiFi, et probablement même de Storm. (Pensez à la surveillance de milliers de stations terriennes, où j'ai besoin de voir les conditions météorologiques des petites régions pour les alertes de tornade).

Daemeon
la source