關於storm的基礎,參照我這篇文章:流式計算storm
關於併發和並行,參照我這篇文章:併發和並行
關於storm的並行度解釋,參照我這篇文章:storm的並行度解釋
關於storm的流分組策略,參照我這篇文章:storm的流分組策略
關於storm的訊息可靠機制,參照我這篇文章:storm的訊息可靠機制
storm中有多個bolt和多個spout,他們之間會有多種連線方式,他們之間的tuple也是多種傳遞方式,正是有了這些靈活的分組策略,才使得storm可以分層處理,每層bolt都只做自己的事情,做完就通過分組策略傳給下一層bolt
github上有原始碼:
這7中storm對應的介面是:
1.shuffle groupingorg.apache
.storm
.topology
.inputdeclarer
隨機分組,保證每個bolt任務被均勻的分配tupleorg.apache
.storm
.grouping
.shufflegrouping
2.fields grouping
按欄位分組,相同欄位的tuple總是被分到相同的bolt中的乙個task上,一般用在計數等org.apache
.storm
.trident
.partition
.indexhashgrouping
3.all grouping
廣播傳送tuple,tuple會被發給所有bolt,常用來傳送訊號
4.global grouping
全域性分組,所有的tuple被發到乙個bolt的乙個task上,一般用來彙總org.apache
.storm
.trident
.partition
.globalgrouping
5.none grouping
不分組,效果和隨機分組一樣,org.apache
.storm
.testing
.ngrouping
有點不一樣的是storm會使用none grouping的這乙個bolt放到這個bolt的訂閱者同乙個執行緒裡面去執行 ( 這個暫時沒明白有什麼好處之類的 )
6.direct grouping
直接分組訊息傳送者指定訊息接收者的哪個task處理這個訊息,只有被表名direct stream的訊息流可以處理這個方法org.apache
.storm
.trident
.partition
.identitygrouping
訊息處理者可以通過topologycontext來獲取處理它訊息的task id
7.local or shuffle grouping
自定義分組,需實現customstreamgrouping介面org.apache
.storm
.grouping
.loadawareshufflegrouping
storm的分組策略
storm有7種流分組策略 1 shuffle grouping 隨機分組 將tuple隨機分配到bolt中,能夠保證各task中處理的資料均衡 2 fields grouping 按欄位分組 根據設定的字段相同值得tuple被分配到同乙個bolt進行處理 舉例 builder.setbolt my...
storm分組策略介紹
size medium b 一 storm資料 b size spout的資料來源 mq 直接流資料來源 db 只能讀配置檔案 檔案 只能學習用,其他無用。問題 1 分布式應用無法讀 2 spout開併發會重複讀 log檔案增量資料 1 讀出內容寫入mq,2 storm處理 size medium ...
storm訊息分組策略
grouping 訊息分發策略決定了訊息在spout和bolt間,bolt和bolt間如何進行傳遞。流分組策略有內建的八種,同時還可以進行自定義。這裡將介紹最常用的幾種 shuffle grouping 隨機分發到兩個bolt上,確保兩個bolt上tuple的數量大體相同,從日誌列印上可看出。bui...