Storm是一個開源的分佈式實時計算系統,可以簡單、可靠的處理大量的數據流。Storm的部署和運維都很便捷,而且更爲重要的是可以使用任意編程語言來開發應用。
storm:實時計算系統
低延遲,高性能,分佈式,可擴展,容錯
特點:簡單編程模型,熱部署,各種編程語言,可擴展,容錯,可靠消息處理,快速,本地模式
storm基本概念:
Nimbus:負責資源分配和任務調度
Supervisor:負責接受nimbus分配的任務,啓動和停止屬於自己管理的worker進程
Worker:運行具體處理組件邏輯的進程
Task:worker中每一個spout/bolt的線程稱爲一個task,在storm0.8後,task不在與物理線程對應,同一個spout/bolt的task可能會共享一個物理線程,該線程稱爲executor
Topology:storm中運行的一個實時的應用程序,因爲各個組件間的消息流動形成邏輯上的一個拓撲結構
Spout:在一個topology中產生源數據的組件。通常情況下spout會從外部數據源中讀取數據,然後轉換爲topology的內部的源數據。spout是一個主動的角色,其接口中有一個nextTuple()的函數。storm框架會不停的調用此函數,用戶只要在其中生成源數據即可。
Bolt:在一個topology中接受數據然後執行處理的組件。Bolt可以執行過濾、函數操作、合併、寫數據庫等任何操作。Bolt是一個被動的角色,其接口中有個execute(Tupleinput)函數,在接受到消息後會調用此函數,用戶可以在其中執行自己想要的操作。
Tuple:一次消息傳遞的基本單元。本來應該是一個key-value的map,但是由於各個組件間的傳遞的tuple的字段名稱已經事先定義好,所以Tuple中只要按序填入各個value就行了,是一個valueList。
Stream:源源不斷傳遞的Tuple就組成了stream.
Strom使用場景:
1.流聚合:把兩個或者多個數據流聚合成一個數據流-基於一些共同的tuple字段。
2.批處理:爲了性能或者一些別的原因,把一組tuple一起處理,而不是一個一個的單獨處理。
3.BasicBolt
a.讀一個輸入的tuple
b.根據一個輸入tuple發射一個或多個tuple
c.在execute的方法的最後ack那個輸入tuple遵循這類模式的bolt一般是函數或者是過濾器,這種模式太常見,storm爲這類模式單獨封裝了一個接口:IbasicBolt
d.內存內緩存+Fields grouping組合
e.據算topN
f.用TimeCacheMap來高效的保存一個最近被更新對象的緩存
g.分佈式RPC
storm分組機制
1.隨機分組(Shuffle grouping)
2.字段分組(Fields grouping)
3.全部分組(All grouping)
4.全局分組(Global grouping)
5.無分組(None grouping)
6.直接分組(Direct grouping)
7.實現CustomStreamGrouping接口來定義自己的分組