4.storm中的拓撲示例(進程/線程/任務)

下面定義一個名爲 mytopology 的拓撲,由一個 Spout 組件(BlueSpout)、兩個 Bolt 組件 (GreenBolt 和 YellowBolt)共 3 個組件構成。

Config conf = new Config(); 

conf.setNumWorkers(2); 
// 使用兩個工作進程

topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2);
// 設並行度爲 2
 
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4)
// 使用 4 個任務 .shuffleGrouping("blue-spout");

topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6) .shuffleGrouping("green-bolt");

StormSubmitter.submitTopology( "mytopology",conf,topologyBuilder.createTopology());

mytopology 拓撲的描述如下:
拓撲將使用兩個工作進程(Worker);
Spout是id爲blue-spout、並行度爲2的BlueSpout實例(產生兩個執行器和兩個任務);
第一個 Bolt 是 id 爲 green-bolt、並行度爲 2、任務數爲 4、使用隨機分組方式接收blue-spout 所發射元組的 GreenBolt 實例(產生兩個執行器和 4 個任務);
第二個Bolt是id爲yellow-bolt、並行度爲6、使用隨機分組方式接收green-bolt所發射元組的 YellowBolt 實例(產生 6 個執行器和 6 個任務)。

所以,該拓撲一共有兩個工作進程(Worker),2+2+6=10 個執行器(Executor),2+4+6=12 個任務。因此,每個工作進程可以分配到 10/2=5 個執行器,12/2=6 個任務。默認情況下,一 個執行器執行一個任務,但是如果指定了任務的數目,則任務會平均分配到執行器中,因此, GreenBolt 的實例 green-bolt 的一個執行器將會分配到 4/2=2 個任務。mytopology 的拓撲及其對 應的資源分配如圖 2.8 所示。

# "mytopology" 拓撲使用 5 Worker 進程
# "blue-spout" Spout 使用 3 Executor
# "yellow-bolt" Bolt 使用 10 Executor
storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
發佈了46 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章