Apache Storm簡介html
Storm是一個分佈式的,可靠的,容錯的數據流處理系統。Storm集羣的輸入流由一個被稱做spout的組件管理,spout把數據傳遞給bolt, bolt要麼把數據保存到某種存儲器,要麼把數據傳遞給其它的bolt。一個Storm集羣就是在一連串的bolt之間轉換spout傳過來的數據。node
Storm組件apache
在Storm集羣中,有兩類節點:主節點master node和工做節點worker nodes。主節點運行Nimbus守護進程,這個守護進程負責在集羣中分發代碼,爲工做節點分配任務,並監控故障。Supervisor守護進程做爲拓撲的一部分運行在工做節點上。一個Storm拓撲結構在不一樣的機器上運行着衆多的工做節點。每一個工做節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則經過Zookeeper系統或者集羣。
分佈式
Zookeeper大數據
Zookeeper是完成Supervisor和Nimbus之間協調的服務。而應用程序實現實時的邏輯則被封裝進Storm中的「topology」。topology則是一組由Spouts(數據源)和Bolts(數據操做)經過Stream Groupings進行鏈接的圖。spa
Spout線程
Spout歷來源處讀取數據並放入topology。Spout分紅可靠和不可靠兩種;當Storm接收失敗時,可靠的Spout會對tuple(元組,數據項組成的列表)進行重發;而不可靠的Spout不會考慮接收成功與否只發射一次。而Spout中最主要的方法就是nextTuple(),該方法會發射一個新的tuple到topology,若是沒有新tuple發射則會簡單的返回。orm
Bolthtm
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
歡迎掃碼關注下面公衆號,按期分享大數據與知識圖譜相關知識點,讀書思考。