Stream Groupings

Stream Grouping定義了一個流在Bolt任務間該如何被切分。 這里有storm提供的9個Stream Grouping類型
1、shuffleGrouping(隨機分組)

隨機分發tuple到Bolt的任務,保證每個任務獲得相等數量的tuple。
2、fieldsGrouping(字段分組)

根據指定字段分割數據流,并分組。例如,根據"user-id"字段,相同"user-id"的元組總是分發到同一個任務,不同“ user-id”的元組可能分發到不同的任務。

原理是 對某個或幾個字段做hash,然后用hash結果求模得出目標taskId。
3、globalGrouping(全局分組)

全部流都分配到bolt的同一個任務。明確地說,是分配給ID最小的那個task。
4、allGrouping(全部分組)

tuple被復制到bolt的所有任務。這種類型需要謹慎使用。
5、directGrouping(直接分組)

這是一個特別的分組類型。元組生產者決定tuple由哪個元組處理者(Blot)任務接收。
6、noneGrouping(無分組)

目前,無分組等效于隨機分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執行(如果可能)。
7、localOrShuffleGrouping(本地或隨機分組)

如果目標bolt有一個或多個任務在同一個的worker進程中,tuples會隨機發送給這些任務。 否則,就和普通的隨機分組一樣。
8、PartialKeyGrouping(部分關鍵字分組) after v1.0.0

這種方式與字段分組很相似,根據定義的字段來對數據流進行分組,不同的是,這種方式會考慮下游 Bolt 數據處理的均衡性問題,在輸入數據源關鍵字不平衡時會有更好的性能。
9、自定義分組

可以實現customGrouping接口來選擇出目標task。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容