Apache Storm核心概念
Apache Storm從一端讀取即時資料的原始流,並將其傳遞通過一系列小處理單元,並在另一端輸出處理/有用的信息。
下圖描述了Apache Storm的核心概念。
現在讓我們仔細看看Apache Storm的元件-
元件 | 描述 |
---|---|
Tuple | Tuple是Storm中的主要資料結構。它是有序元素的列表。預設情況下,Tuple支援所有資料類型。通常,它被建模為一組逗號分隔的值,並傳遞到Storm叢集。 |
Stream | 流是元組的無序序列。 |
Spouts | 流的來源。通常,Storm會從原始資料來源(如Twitter Streaming API,Apache Kafka佇列,Kestrel佇列等)接受輸入資料。否則,您可以編寫spouts以從資料來源讀取資料。 「ISpout」是實現spouts的核心接口,一些特定的接口是IRichSpout,BaseRichSpout,KafkaSpout等。 |
Bolts | Bolts是邏輯處理單元。 Spouts將資料傳遞到Bolts和Bolts流程,並產生新的輸出流。 Bolts可以執行過濾,聚合,加入,與資料來源和資料庫互動的操作。 Bolts接收資料並發射到一個或多個Bolts。 “IBolt”是實現Bolts的核心介面。一些常見的介面是IRichBolt,IBasicBolt等。 |
讓我們來看一個「Twitter分析」的即時範例,看看如何在Apache Storm中建模。下圖描述了結構。
「Twitter分析」的輸入來自Twitter Streaming API。 Spout將使用Twitter Streaming API讀取使用者的tweets,並作為元組流輸出。來自spout的單一元組將具有twitter使用者名稱和單一tweet作為逗號分隔值。然後,這個元組的蒸汽將被轉發到Bolt,並且Bolt將tweet拆分成單個字,計算字數,並將資訊保存到配置的資料來源。現在,我們可以透過查詢資料來源輕鬆獲得結果。
拓樸
Spouts和Bolts連接在一起,形成拓樸結構。即時應用程式邏輯在Storm拓撲中指定。簡單地說,拓撲是有向圖,其中頂點是計算,邊緣是資料流。
簡單拓樸從spouts開始。 Spouts將資料發射到一個或多個Bolts。 Bolt表示拓樸中具有最小處理邏輯的節點,且Bolts的輸出可以發射到另一個Bolts作為輸入。
Storm保持拓撲始終運行,直到您終止拓撲。 Apache Storm的主要工作是運行拓撲,並在給定時間運行任意數量的拓撲。
任務
現在你有一個關於Spouts和Bolts的基本想法。它們是拓撲的最小邏輯單元,並且使用單一Spout和Bolt陣列建立拓撲。應以特定順序正確執行它們,以使拓撲成功運行。 Storm執行的每個Spout和Bolt稱為「任務」。簡單來說,任務就是Spouts或Bolts的執行。在給定時間,每個Spout和Bolt可以具有在多個單獨的螺紋中運行的多個實例。
進程
拓撲在多個工作節點上以分散式方式運作。 Storm將所有工作節點上的任務均勻分佈。工作節點的角色是監聽作業,並在新作業到達時啟動或停止進程。
流分組
資料流從Spouts流到Bolts,或從一個Bolts流到另一個Bolts。流分組控制元組在拓樸中的路由方式,並幫助我們了解拓樸中的元組流。有四個內建分組,如下所述。
隨機分組
在隨機分組中,相等數量的元組隨機分佈在執行Bolts的所有工人中。下圖描述了結構。
欄位分組
元組中具有相同值的欄位組合在一起,其餘的元組則保存在外部。然後,具有相同欄位值的元組被向前傳送到執行Bolts的相同進程。例如,如果流由字段“字”分組,則具有相同字串“Hello”的元組將移動到相同的工作者。下圖顯示了欄位分組的工作原理。
全域分組
所有流可以分組並向前到一個Bolts。此分組將來源的所有實例產生的元組傳送到單一目標實例(具體來說,選擇具有最低ID的工作程序)。
所有分組
所有分組將每個元組的單一副本傳送到接收Bolts的所有實例。這種分組用於向Bolts發送訊號。所有分組對於連接操作都很有用。