Stream Grouping詳解
阿新 • • 發佈:2018-12-20
Storm裡面有7種型別的stream grouping
- shuffle Grouping :隨機分組,隨機派發stream裡面的tuple,保證每個bolt接收到的tuple數目大致相同。
- Fields Grouping:按欄位分組,比如按userID來分組,具有同樣userID的tuple會被分到相同的bolts裡的一個task,而不同的userID則會被分配到不同的bolts裡面的task。
- All Grouping :廣播發送,對於每一個tuple,所有的bolts都會收到。
- Global Grouping :全域性分組,這個tuple被分配到storm中的一個bolt的其中一個task,再具體一點就是分配給id值最低的那個task。
- Non Grouping :不分組,這stream grouping個分組的意思是說stream不關心到底誰會收到它的tuple。目前這種分組和shuffle grouping是一樣的效果,有一點不同的是storm會把這個bolt放到這個bolt的訂閱者同一個執行緒裡面去執行。
- Direct Grouping :直接分組,這是一種比較特別的分組方法,用這種分組意味著訊息的傳送者指定有訊息接收者的哪個task處理這個訊息,只有被宣告為Direct Stream的訊息流可以宣告這種方法。而且這種訊息tuple必須使用emitDirect方法來發射。訊息處理者可以通過TopologyContext來獲取處理他的訊息的task的id(outputCollector.emit方法也會返回task的id)
- local or shuffle grouping:如果目標bolt有一個或者多個task在同一個工作程序中,tuple將會隨機發生給這些tasks。否則,和普通的shuffle grouping行為一致。
- 部分原始碼展示: