Apache Storm - 核心概念



Apache Storm 從一端讀取即時資料的原始流,並將其透過一系列小的處理單元,並在另一端輸出處理後的/有用的資訊。

下圖描繪了 Apache Storm 的核心概念。

Core Concept

現在讓我們更仔細地看看 Apache Storm 的元件 -

元件 描述
元組 (Tuple) 元組是 Storm 中的主要資料結構。它是一個有序元素的列表。預設情況下,元組支援所有資料型別。通常,它被建模為一組逗號分隔的值,並傳遞到 Storm 叢集。
流 (Stream) 流是元組的無序序列。
噴口 (Spouts) 流的源頭。通常,Storm 從原始資料來源(如 Twitter Streaming API、Apache Kafka 佇列、Kestrel 佇列等)接受輸入資料。否則,您可以編寫噴口從資料來源讀取資料。“ISpout”是實現噴口的核心介面。一些特定的介面是 IRichSpout、BaseRichSpout、KafkaSpout 等。
螺栓 (Bolts) 螺栓是邏輯處理單元。噴口將資料傳遞給螺栓,螺栓處理並生成新的輸出流。螺栓可以執行過濾、聚合、連線、與資料來源和資料庫互動的操作。螺栓接收資料並向一個或多個螺栓發出資料。“IBolt”是實現螺栓的核心介面。一些常見的介面是 IRichBolt、IBasicBolt 等。

讓我們以“Twitter 分析”的即時示例為例,看看它如何在 Apache Storm 中建模。下圖描繪了結構。

Twitter Analysis

“Twitter 分析”的輸入來自 Twitter Streaming API。噴口將使用 Twitter Streaming API 讀取使用者的推文,並將其輸出為元組流。來自噴口的單個元組將包含 Twitter 使用者名稱和單個推文作為逗號分隔的值。然後,此元組流將轉發到螺栓,螺栓將推文拆分為單個單詞,計算單詞計數,並將資訊持久化到已配置的資料來源。現在,我們可以透過查詢資料來源輕鬆獲取結果。

拓撲 (Topology)

噴口和螺栓連線在一起,形成一個拓撲。即時應用程式邏輯在 Storm 拓撲中指定。簡單來說,拓撲是一個有向圖,其中頂點是計算,邊是資料流。

一個簡單的拓撲從噴口開始。噴口將資料傳送到一個或多個螺栓。螺栓表示拓撲中具有最小處理邏輯的節點,螺栓的輸出可以作為輸入傳送到另一個螺栓。

Storm 保持拓撲始終執行,直到您終止拓撲。Apache Storm 的主要工作是執行拓撲,並且可以在給定時間執行任意數量的拓撲。

任務 (Tasks)

現在您對噴口和螺栓有了基本的瞭解。它們是拓撲中最小的邏輯單元,並且可以使用單個噴口和螺栓陣列構建拓撲。為了使拓撲成功執行,它們應該按照特定的順序正確執行。Storm 對每個噴口和螺栓的執行稱為“任務”。簡單來說,任務要麼是噴口的執行,要麼是螺栓的執行。在給定時間,每個噴口和螺栓可以有多個例項在多個單獨的執行緒中執行。

工作節點 (Workers)

拓撲以分散式方式在多個工作節點上執行。Storm 將任務均勻地分佈在所有工作節點上。工作節點的作用是偵聽作業並在新作業到達時啟動或停止程序。

流分組 (Stream Grouping)

資料流從噴口流向螺栓,或從一個螺栓流向另一個螺栓。流分組控制元組如何在拓撲中路由,並幫助我們理解元組在拓撲中的流動。如下所述,有四種內建分組。

隨機分組 (Shuffle Grouping)

在隨機分組中,數量相等的元組隨機分佈在執行螺栓的所有工作節點上。下圖描繪了結構。

Shuffle Grouping

欄位分組 (Field Grouping)

元組中具有相同值的欄位被分組在一起,其餘元組保持在外部。然後,具有相同欄位值的元組被髮送到執行螺栓的同一工作節點。例如,如果流按欄位“word”分組,則具有相同字串“Hello”的元組將移動到同一工作節點。下圖顯示了欄位分組的工作原理。

Field Grouping

全域性分組 (Global Grouping)

所有流都可以分組並轉發到一個螺栓。此分組將源的所有例項生成的元組傳送到單個目標例項(具體來說,選擇 ID 最低的工作節點)。

Global Grouping

全部分組 (All Grouping)

全部分組將每個元組的單個副本傳送到接收螺栓的所有例項。這種分組用於向螺栓傳送訊號。全部分組對於連線操作很有用。

All Grouping
廣告

© . All rights reserved.