1、Strom的優勢:node
1.容錯性。Storm會管理工做進程和節點的故障。編程
2.快速。系統的設計保證了消息能獲得快速的處理,使用ZeroMQ做爲其底層消息隊列。架構
3.可靠的消息處理。Storm保證每一個消息至少能獲得一次完整處理。任務失敗時,它會負責從消息源重試消息。oop
Strom的簡單原理:spa
Storm集羣主要由一個主節點和一羣工做節點(worker node)組成,經過Zookeeper進行協調。線程
2、基本架構:設計
主節點( Nimbus ):code
主節點一般運行一個後臺程序 —— Nimbus,用於響應分佈在集羣中的節點,分配任務和監測故障。這個很相似於Hadoop中的 Job Tracker。orm
工做節點( Supervisor ):隊列
工做節點一樣會運行一個後臺程序 —— Supervisor,用於收聽工做指派並基於要求運行工做進程。每一個工做節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則經過Zookeeper系統或者集羣。
Zookeeper
Zookeeper是完成Supervisor和Nimbus之間協調的服務。而應用程序實現實時的邏輯則被封裝進Storm中的「topology」。topology則是一組由Spouts(數據源)和Bolts(數據操做)經過Stream Groupings進行鏈接的圖。
Worker
運行具體處理組件邏輯的進程。
Task
worker中每個spout/bolt的線程稱爲一個task. 在storm0.8以後,task再也不與物理線程對應,同一個spout/bolt的task可能會共享一個物理線程,該線程稱爲executor。
3、編程架構
Topology
1 拓撲是一個計算圖; 2 拓撲中的每個節點都包含處理邏輯;3 拓撲描述了數據在各節點間傳輸的方向;4 拓撲描述了spouts和bolts任務間的關係。
Tuple是一個消息單元,源源不斷的消息單元(tuples)就組成了流(Stream)
Stream groupings:消息分發策略
分發策略分類:
1.Shuffle Grouping: 隨機分組, 隨機派發stream裏面的tuple, 保證每一個bolt接收到的tuple數目相同.
2.Fields Grouping:按字段分組, 好比按userid來分組, 具備一樣userid的tuple會被分到相同的Bolts, 而不一樣的userid則會被分配到不一樣的Bolts.
3.All Grouping: 廣播發送, 對於每個tuple, 全部的Bolts都會收到.
4.Global Grouping: 全局分組,這個tuple被分配到storm中的一個bolt的其中一個task.再具體一點就是分配給id值最低的那個task.
5.Non Grouping: 不分組,意思是說stream不關心到底誰會收到它的tuple.目前他和Shuffle grouping是同樣的效果,有點不一樣的是storm會把這個bolt放到這個bolt的訂閱者同一個線程去執行.
6.Direct Grouping: 直接分組,這是一種比較特別的分組方法,用這種分組意味着消息的發送者決定由消息接收者的哪一個task處理這個消息.只有被聲明爲Direct Stream的消息流能夠聲明這種分組方法.並且這種消息tuple必須使用emitDirect方法來發射.消息處理者能夠經過TopologyContext來或者處理它的消息的taskid (OutputCollector.emit方法也會返回taskid)。