Apache Kafka contro Apache Storm


102

Apache Kafka: sistema di messaggistica distribuito
Apache Storm: elaborazione messaggi in tempo reale

Come possiamo utilizzare entrambe le tecnologie in una pipeline di dati in tempo reale per l'elaborazione dei dati degli eventi?

In termini di pipeline di dati in tempo reale, entrambi mi sembrano fare il lavoro identico. Come possiamo utilizzare entrambe le tecnologie su una pipeline di dati?

Risposte:


158

Si utilizza Apache Kafka come una coda robusta e distribuita in grado di gestire un volume elevato di dati e consente di passare messaggi da un endpoint a un altro.

Storm non è una coda. È un sistema che ha distribuito capacità di elaborazione in tempo reale, il che significa che è possibile eseguire tutti i tipi di manipolazioni sui dati in tempo reale in parallelo.

Il flusso comune di questi strumenti (per come lo conosco io) è il seguente:

sistema in tempo reale -> Kafka -> Storm -> NoSql -> BI (opzionale)

Quindi hai la tua app in tempo reale che gestisce dati ad alto volume, la invia alla coda Kafka. Storm estrae i dati da kafka e applica alcune manipolazioni richieste. A questo punto di solito si desidera ottenere alcuni vantaggi da questi dati, quindi lo si invia a qualche db Nosql per calcoli BI aggiuntivi, oppure si potrebbe semplicemente interrogare questo NoSql da qualsiasi altro sistema.


Grazie Forhas. Questo è molto utile. Una domanda: possiamo usare Apache Kafka per aggregare i file di log di Apache o abbiamo ancora bisogno di Flume per farlo?
Ananth Duari

Immagino che tu possa, anche se non ho familiarità con un tale flusso. Forse puoi controllare Splunk per le tue esigenze (solo una supposizione ..).
dal

Consiglio di utilizzare GrayLog e collegarlo ad apache kafka. GrayLog ha già un plug-in di input kakfa.
Saeid rastak

36

Kafka e Storm hanno uno scopo leggermente diverso:

Kafka è un broker di messaggi distribuito in grado di gestire grandi quantità di messaggi al secondo. Utilizza il paradigma di pubblicazione-sottoscrizione e si basa su argomenti e partizioni. Kafka utilizza Zookeeper per condividere e salvare lo stato tra i broker. Quindi Kafka è fondamentalmente responsabile del trasferimento dei messaggi da una macchina all'altra.

Storm è un sistema di analisi in tempo reale scalabile, tollerante ai guasti (pensa come Hadoop in tempo reale). Consuma i dati dalle origini (Spouts) e li passa alla pipeline (Bolt). Puoi combinarli nella topologia. Quindi Storm è fondamentalmente un'unità di calcolo (aggregazione, apprendimento automatico).


Ma puoi usarli insieme: ad esempio la tua applicazione usa kafka per inviare dati ad altri server che usano storm per fare dei calcoli su di esso.


32

So che questo è un thread più vecchio e i confronti di Apache Kafka e Storm erano validi e corretti quando sono stati scritti, ma vale la pena notare che Apache Kafka si è evoluto molto nel corso degli anni e dalla versione 0.10 (aprile 2016) Kafka ha incluso un'API Kafka Streams che fornisce funzionalità di elaborazione del flusso senza la necessità di alcun software aggiuntivo come Storm. Kafka include anche l'API Connect per la connessione a varie origini e sink (destinazioni) di dati.

Blog di annuncio - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

Documentazione corrente di Apache: https://kafka.apache.org/documentation/streams/

In 0.11 Kafka la funzionalità di elaborazione del flusso è stata ulteriormente ampliata per fornire semantica e transazioni Exactly Once.

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


1
Quindi fondamentalmente ora un sistema in tempo reale comunica direttamente con Kafka come punto finale e Kafka memorizza ad esempio un DB?
problemofficer

2
Sì, ora Kafka include Kafka Connect per parlare con database e altre origini dati (syslog, JMS, file di registro, ecc.) E Kafka Streams per eseguire l'elaborazione del flusso (join, trasformazioni, filtri, aggregazioni) e di nuovo a Kafka Connect per scrivere in un altro database o repository.
Hans Jespersen

15

È così che funziona

Kafka - Per fornire un flusso in tempo reale

Tempesta : per eseguire alcune operazioni su quel flusso

Potresti dare un'occhiata al progetto GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js è una libreria di rappresentazione grafica)

Custodia ideale:

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

Questo repository si basa su:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js

1
Abhishek, il collegamento menzionato nella risposta sopra è interrotto. Puoi aggiornare il link?
Abhijit Gaikwad

4

Come tutti ti spiegano che Apache Kafka: è una coda di messaggistica continua

Apache Storm: è uno strumento di elaborazione continua

qui in questo aspetto Kafka otterrà i dati da qualsiasi sito Web come FB, Twitter utilizzando le API e tali dati vengono elaborati utilizzando Apache Storm e puoi memorizzare i dati elaborati in qualsiasi database che ti piace.

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

Basta seguirlo per farti un'idea


3

Quando ho un caso d'uso che mi richiede di visualizzare o avvisare sui modelli (pensa alle tendenze di Twitter), pur continuando a elaborare gli eventi, ho diversi modelli.
NiFi mi consentirebbe di elaborare un evento e aggiornare un archivio dati persistente con un'aggregazione batch bassa (er) con una codifica personalizzata molto, molto ridotta.
Storm (molta codifica personalizzata) mi consente di accedere quasi in tempo reale agli eventi di tendenza.
Se posso aspettare molti secondi, posso eseguire il batch di kafka, in hdfs (Parquet) ed elaborare.
Se ho bisogno di sapere in pochi secondi, ho bisogno di NiFi e probabilmente anche di Storm. (Pensa al monitoraggio di migliaia di stazioni terrestri, dove ho bisogno di vedere le condizioni meteorologiche di piccole regioni per gli avvisi di tornado).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.