Apache Kafka vs Apache Storm

Apache Kafka: Système de messagerie dissortingbué
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 traiter les données d’événement?

En termes de pipeline de données en temps réel, il me semble que le travail est identique. Comment pouvons-nous utiliser les deux technologies sur un pipeline de données?

Vous utilisez Apache Kafka en tant que queue dissortingbuée et robuste capable de gérer des données volumineuses et de transmettre des messages d’un point d’extrémité à un autre.

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

Le stream commun de ces outils (tel que je le connais) va comme suit:

Système temps réel -> Kafka -> Storm -> NoSql -> BI (optionnel)

Ainsi, votre application en temps réel gère les données volumineuses et les envoie à la queue Kafka. Storm extrait les données de kafka et applique les manipulations nécessaires. A ce stade, vous souhaitez généralement tirer parti de ces données, vous pouvez donc les envoyer à d’autres bases de données pour des calculs BI supplémentaires, ou vous pouvez simplement interroger ce NoSql depuis n’importe quel autre système.

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

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

Storm est un système d’parsing en temps réel évolutif, tolérant aux pannes (comme Hadoop en temps réel). Il consum des données provenant de sources (Spouts) et les transmet au pipeline (Bolts). Vous pouvez les combiner dans la topologie. Donc, Storm est fondamentalement une unité de calcul (agrégation, apprentissage automatique).


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

Je sais qu’il s’agit d’un ancien sujet et que les comparaisons entre Apache Kafka et Storm étaient correctes et correctes lors de leur rédaction, mais il convient de noter qu’Apache Kafka a beaucoup évolué au fil des ans et depuis la version 0.10 (avril 2016) une API Kafka Streams qui fournit des capacités de traitement de stream sans nécessiter de logiciel supplémentaire tel que Storm. Kafka inclut également l’API Connect pour la connexion à diverses sources et puits (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 de Kafka, la fonctionnalité de traitement de stream a été étendue pour fournir une sémantique et des transactions exactes.

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

Voilà comment cela fonctionne

Kafka – Fournir un stream en temps réel

Storm – Pour effectuer certaines opérations sur ce stream

Vous pourriez jeter un oeil 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 ->  -> NoSQL -> d3js 

Comme chacun vous explique qu’Apache Kafka: est une queue de messagerie continue

Apache Storm: est un outil de traitement continu

Ici, dans cet aspect, Kafka récupérera les données de n’importe quel site Web comme FB, Twitter en utilisant des API et les données seront traitées à l’aide d’Apache Storm et vous pourrez stocker les données traitées dans n’importe quelle firebase database.

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

Il suffit de le suivre, vous aurez une idée

Lorsque j’ai un cas d’utilisation qui nécessite de visualiser ou d’alerter 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 stockage de données persistant avec une agrégation de lots faible avec un codage personnalisé très réduit.
Storm (beaucoup de codage personnalisé) me permet un access quasiment en temps réel aux événements tendances.
Si je peux attendre plusieurs secondes, alors je peux sortir par lots 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 à surveiller des milliers de stations terriennes, où je dois voir les conditions météorologiques de petite région pour les avertissements de tornade).