Apache Storm分散式實時處理資料流系統
Storm是一個分散式的,可靠的,容錯的資料流處理系統。Storm叢集的輸入流由一個被稱作spout的元件管理,spout把資料傳遞給bolt, bolt要麼把資料儲存到某種儲存器,要麼把資料傳遞給其它的bolt。一個Storm叢集就是在一連串的bolt之間轉換spout傳過來的資料。
Storm元件
在Storm叢集中,有兩類節點:主節點master node和工作節點worker nodes。主節點執行Nimbus守護程序,這個守護程序負責在叢集中分發程式碼,為工作節點分配任務,並監控故障。Supervisor守護程序作為拓撲的一部分執行在工作節點上。一個Storm拓撲結構在不同的機器上執行著眾多的工作節點。每個工作節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則通過Zookeeper系統或者叢集。
Zookeeper
Zookeeper是完成Supervisor和Nimbus之間協調的服務。而應用程式實現實時的邏輯則被封裝進Storm中的“topology”。topology則是一組由Spouts(資料來源)和Bolts(資料操作)通過Stream Groupings進行連線的圖。
Spout
Spout從來源處讀取資料並放入topology。Spout分成可靠和不可靠兩種;當Storm接收失敗時,可靠的Spout會對tuple(元組,資料項組成的列表)進行重發;而不可靠的Spout不會考慮接收成功與否只發射一次。而Spout中最主要的方法就是nextTuple(),該方法會發射一個新的tuple到topology,如果沒有新tuple發射則會簡單的返回。
Bolt
Topology中所有的處理都由Bolt完成。Bolt從Spout中接收資料並進行處理,如果遇到複雜流的處理也可能將tuple傳送給另一個Bolt進行處理。而Bolt中最重要的方法是execute(),以新的tuple作為引數接收。不管是Spout還是Bolt,如果將tuple發射成多個流,這些流都可以通過declareStream()來宣告。
Stream Groupings
Stream Grouping定義了一個流在Bolt任務中如何被切分。
1. Shuffle grouping:隨機分發tuple到Bolt的任務,保證每個任務獲得相等數量的tuple。
2.Fields grouping:根據指定欄位分割資料流,並分組。例如,根據“user-id”欄位,相同“user-id”的元組總是分發到同一個任務,不同“user-id”的元組可能分發到不同的任務。
3. Partial Key grouping:根據指定欄位分割資料流,並分組。類似Fields grouping。
4.All grouping:tuple被複制到bolt的所有任務。這種型別需要謹慎使用。
5. Global grouping:全部流都分配到bolt的同一個任務。明確地說,是分配給ID最小的那個task。
6. None grouping:無需關心流是如何分組。目前,無分組等效於隨機分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一執行緒去執行(如果可能)。
7. Direct grouping:這是一個特別的分組型別。元組生產者決定tuple由哪個元組處理者任務接收。
8. Local or shuffle grouping:如果目標bolt有一個或多個任務在同一工作程序,tuples 會打亂這些程序內的任務。否則,這就像一個正常的 Shuffle grouping。
轉自:https://www.cnblogs.com/zeppelin/p/6098813.html