Storm是一個開源的分佈式實時計算系統,能夠簡單、可靠的處理大量的數據流。Storm的部署和運維都很便捷,並且更爲重要的是可使用任意編程語言來開發應用。數據庫
storm:實時計算系統編程
低延遲,高性能,分佈式,可擴展,容錯緩存
特色:簡單編程模型,熱部署,各類編程語言,可擴展,容錯,可靠消息處理,快速,本地模式框架
storm基本概念:運維
Nimbus:負責資源分配和任務調度編程語言
Supervisor:負責接受nimbus分配的任務,啓動和中止屬於本身管理的worker進程分佈式
Worker:運行具體處理組件邏輯的進程ide
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接口來定義本身的分組