storm(四) 並行度
阿新 • • 發佈:2019-02-17
概念
worker
- 一個實體機可以執行一個或者多個worker
- 一個worker只能執行一個topology上的部分或全部component
- 一個worker是一個獨立的程序
- 在執行過程中可以調整worker的數量
executor
- 一個worker中可以執行多個executor
- 一個executor是一個執行緒
- 一個executor可以執行一個或者多個task,這些task必須是同一型別
- executor的數量<=task的數量
- 預設情況下一個executor中執行一個task
- executor的數量在topology的執行過程中可以動態調整,storm的並行度調整主要針對的就是executor
task
- 具體操作資料的bolt或者spout
- 在整個topology執行狀態中,task的數量是固定的不能改變的
並行度調整
調整並行度有幾種方法,這裡我選擇的是直接在程式碼中進行設定
設定worker
- 關閉acker,將worker程序設定成2
- 由於現在有兩個worker,兩個executor(見下面截圖),所以兩個executor被平均分配給了兩個worker,在我們這裡就是一個生產一個消費(從列印的日誌可以看出來)
Config config=new Config(); config.setNumWorkers(2); config.setNumAckers(0); StormSubmitter.submitTopology("SumTopology",config,topology);
設定executor
- 預設一個executor對應一個task,這裡我設定executor的數量為3,所以task也為3
builder.setBolt("countNum",new SumBolt(),3).shuffleGrouping("createNum");
設定task
- 預設情況下一個executor下只有一個task,但是當設定的task的數量大於executor的時候,一個executor上就可能有多個task
builder.setSpout("createNum",new NumSpout()); builder.setBolt("countNum",new SumBolt(),3) .setNumTasks(6) .shuffleGrouping("createNum");
設定acker
- 設定acker的方式在第一個例子中已經示範過,這裡就不在演示了
- 不過一般並不建議將acker關閉,這樣將無法保證資料的可靠性
動態設定並行度
- 這裡我使用的是命令列的方式,至於storm ui的方式沒搞懂
- 這裡我將worker改成1個,createNum改為2個executor,countNum改為2個executor。注意這裡沒有調整task
- 所謂的並行調整其實就是重新分配:task所在的executor,executor所在的worker。task是真正做事的bolt、spout。所以如果task數量不夠,即使將executor、worker的數量設定的再大也沒有用
docker run --link nimbus:nimbus -it --rm storm
storm rebalance SumTopology -n 1 -e createNum=2 -e countNum=2