Apache Storm - Concetti fondamentali
Apache Storm legge il flusso grezzo di dati in tempo reale da un'estremità e lo trasmette attraverso una sequenza di piccole unità di elaborazione e invia le informazioni elaborate / utili all'altra estremità.
Il diagramma seguente illustra il concetto di base di Apache Storm.
Diamo ora uno sguardo più da vicino ai componenti di Apache Storm -
Componenti | Descrizione |
---|---|
Tupla | Tuple è la struttura dati principale in Storm. È un elenco di elementi ordinati. Per impostazione predefinita, una tupla supporta tutti i tipi di dati. In genere, viene modellato come un insieme di valori separati da virgole e passato a un cluster Storm. |
Stream | Stream è una sequenza non ordinata di tuple. |
Beccucci | Fonte del flusso. In genere, Storm accetta dati di input da origini dati non elaborate come Twitter Streaming API, coda Apache Kafka, coda Kestrel, ecc. In caso contrario, è possibile scrivere spout per leggere dati da origini dati. "ISpout" è l'interfaccia principale per l'implementazione degli spout. Alcune delle interfacce specifiche sono IRichSpout, BaseRichSpout, KafkaSpout, ecc. |
Bulloni | I bulloni sono unità di elaborazione logica. Gli spout passano i dati al processo di bolt e bolt e producono un nuovo flusso di output. Bolts può eseguire le operazioni di filtraggio, aggregazione, unione, interazione con origini dati e database. Bolt riceve i dati ed emette su uno o più bulloni. "IBolt" è l'interfaccia principale per l'implementazione dei bulloni. Alcune delle interfacce comuni sono IRichBolt, IBasicBolt, ecc. |
Facciamo un esempio in tempo reale di "Twitter Analysis" e vediamo come può essere modellato in Apache Storm. Il diagramma seguente mostra la struttura.
L'input per "Twitter Analysis" proviene dall'API Twitter Streaming. Spout leggerà i tweet degli utenti che utilizzano l'API di streaming di Twitter e l'output come un flusso di tuple. Una singola tupla dallo spout avrà un nome utente Twitter e un singolo tweet come valori separati da virgole. Quindi, questo flusso di tuple verrà inoltrato al Bolt e il Bolt dividerà il tweet in singole parole, calcolerà il conteggio delle parole e manterrà le informazioni su un'origine dati configurata. Ora possiamo facilmente ottenere il risultato interrogando l'origine dati.
Topologia
I beccucci e i bulloni sono collegati insieme e formano una topologia. La logica dell'applicazione in tempo reale è specificata nella topologia Storm. In parole semplici, una topologia è un grafo diretto in cui i vertici sono il calcolo e i bordi sono flussi di dati.
Una topologia semplice inizia con gli spout. Spout invia i dati a uno o più bulloni. Bolt rappresenta un nodo nella topologia con la logica di elaborazione più piccola e l'output di un bolt può essere emesso in un altro bolt come input.
Storm mantiene la topologia sempre in esecuzione, fino a quando non si termina la topologia. Il compito principale di Apache Storm è eseguire la topologia e eseguirà un numero qualsiasi di topologia in un dato momento.
Compiti
Ora hai un'idea di base su beccucci e bulloni. Sono la più piccola unità logica della topologia e una topologia è costruita utilizzando un singolo beccuccio e una serie di bulloni. Devono essere eseguiti correttamente in un ordine particolare affinché la topologia venga eseguita correttamente. L'esecuzione di ogni singolo beccuccio e catenaccio da parte di Storm è chiamata "Compiti". In parole semplici, un'attività è l'esecuzione di un beccuccio o di un bullone. In un dato momento, ogni beccuccio e bullone possono avere più istanze in esecuzione in più thread separati.
Lavoratori
Una topologia viene eseguita in modo distribuito, su più nodi di lavoro. Storm distribuisce le attività in modo uniforme su tutti i nodi di lavoro. Il ruolo del nodo di lavoro è ascoltare i lavori e avviare o arrestare i processi ogni volta che arriva un nuovo lavoro.
Raggruppamento di flussi
Il flusso di dati scorre dagli spout ai bulloni o da un bullone all'altro. Il raggruppamento dei flussi controlla il modo in cui le tuple vengono instradate nella topologia e ci aiuta a comprendere il flusso delle tuple nella topologia. Ci sono quattro raggruppamenti incorporati come spiegato di seguito.
Raggruppamento casuale
Nel raggruppamento casuale, un numero uguale di tuple viene distribuito casualmente tra tutti i lavoratori che eseguono i bulloni. Il diagramma seguente mostra la struttura.
Raggruppamento di campi
I campi con gli stessi valori nelle tuple vengono raggruppati e le restanti tuple vengono mantenute all'esterno. Quindi, le tuple con gli stessi valori di campo vengono inviate allo stesso worker che esegue i bolt. Ad esempio, se lo stream è raggruppato in base al campo "parola", le tuple con la stessa stringa "Hello" si sposteranno nello stesso worker. Il diagramma seguente mostra come funziona il raggruppamento dei campi.
Raggruppamento globale
Tutti i flussi possono essere raggruppati e inoltrati a un bullone. Questo raggruppamento invia le tuple generate da tutte le istanze dell'origine a una singola istanza di destinazione (in particolare, scegli il worker con l'ID più basso).
Tutti i raggruppamenti
All Grouping invia una singola copia di ogni tupla a tutte le istanze del bolt ricevente. Questo tipo di raggruppamento viene utilizzato per inviare segnali ai bulloni. Tutto il raggruppamento è utile per le operazioni di unione.