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。
官網概念:http://storm.apache.org/releases/1.0.1/Concepts.html
推薦閱讀:http://ifeve.com/getting-started-with-storm-1
歡迎掃碼關注下面公眾號,定期分享大數據與知識圖譜相關知識點,讀書思考。

