Storm的訊息分發策略

2022-09-06 09:42:12 字數 1310 閱讀 2271

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...