1.shuffle grouping(隨機分組)
tuple會被隨機分發到所有bolt,每個bolt會得到相同數量的tuple,使得負載均衡。
2.fields grouping(按欄位分組)
按field分發,只能傳送給相同field的bolt。
例如:builder.setbolt("mybolt", new mystorebolt(), 5).fieldsgrouping("checkbolt", new fields("uid"));
該bolt由5個任務task執行,相同uid的元組tuple被分配到同乙個task進行處理;該task接收的元祖欄位是mybolt發射出的字段資訊,不受uid分組的影響。
該分組不僅方便統計而且還可以通過該方式保證相同uid的資料儲存不重複(uid資訊寫入資料庫中唯一);
3.partial key grouping(按部分字段分組)
新版本的storm新增的分組。效果跟fields grouping類似,但具有負載均衡的能力。
4.all grouping(廣播分組)
所有tuple都會傳送到所有bolt上。效能較低,請謹慎使用!
5.global grouping(全域性分組)
所有tuple只會傳送到乙個bolt上——id最小的bolt。
6.none grouping(不分組)
實現效果類似於隨機分組。但在底層實現中,storm會把沒有分組的bolt放在其訂閱的bolt或spout的執行緒中執行。即邏輯上是分發了,但在記憶體中執行沒實際分發。
7.direct grouping(直接分組)
用這種分組意味著訊息的傳送者指定由訊息接收者的哪個task處理這個訊息。只有被宣告為direct stream的訊息流可以宣告這種分組方法。
而且這種訊息的tuple必須使用emitdirect方法來發射。訊息處理者可以通過topologycontext來獲取處理它的訊息的taskid(outputcollector.emit方法也會返回taskid)。
8.local or shuffle grouping(本地或隨機分組)
如果目標bolt有乙個或者多個task在同乙個worker程序中,tuple將會被分發到這些正在工作的task中。否則,效果等同於shuffle grouping。即優先把資料傳送到本機的處理器,避免網路傳輸,減少資源消耗。
參考資料
訊息的分發策略
訊息的分發策略最基礎的就是推,拉機制,這有個最好的理解就是git pull 和 push 在這基礎上制定了有5中訊息的分發策略。支援,不支援 1.發布訂閱 生產者生產多少條訊息,每個消費者就消費多少條訊息 push 2.輪詢分發 訊息數 消費者數 每個消費者消費的訊息數 除不盡剩下條數隨機 3.公平...
Storm 分發策略 與Kafka整合
storm當中的分組策略,一共有八種 所謂的grouping策略就是在spout與bolt bolt與bolt之間傳遞tuple的方式。總共有八種方式 1 shufflegrouping 隨機分組 隨機分組 將tuple隨機分配到bolt中,能夠保證各task中處理的資料均衡 2 fieldsgro...
storm訊息分組策略
grouping 訊息分發策略決定了訊息在spout和bolt間,bolt和bolt間如何進行傳遞。流分組策略有內建的八種,同時還可以進行自定義。這裡將介紹最常用的幾種 shuffle grouping 隨機分發到兩個bolt上,確保兩個bolt上tuple的數量大體相同,從日誌列印上可看出。bui...