storm之8 並行度

2022-09-01 05:33:10 字數 2558 閱讀 7002

(一)storm拓撲的並行度可以從以下4個維度進行設定:

1、node(伺服器):指乙個storm集群中的supervisor伺服器數量。

2、worker(jvm程序):指整個拓撲中worker程序的總數量,這些數量會隨機的平均分配到各個node。

3、executor(執行緒):指某個spout或者bolt的匯流排程數量,這些執行緒會被隨機平均的分配到各個worker。

4、task(spout/bolt例項):task是spout和bolt的例項,它們的nexttuple()和execute()方法會被executors執行緒呼叫。除非明確指定,storm會給每個executor分配乙個task。如果設定了多個task,即乙個執行緒持有了多個spout/bolt例項.

注意:以上設定的都是總數量,這些數量會被平均分配到各自的宿主上,而不是設定每個宿主進行多少個程序/執行緒。詳見下面的例子。

(二)並行度的設定方法

1、node:買機器吧,然後加入集群中……

2、worker:config#setnumworkers() 或者配置項 topology_workers

3、executor:topology.setspout()/.setbolt()

4、task:componentconfigurationdeclarer#setnumworker()

(三)例子:

// 3、建立topology

topologybuilder builder = new topologybuilder();

builder.setspout("kafka-reader", new kafkaspout(spoutconf), 5);//設定executor數量為5

builder.setbolt("filter-bolt", new filterbolt(), 3).shufflegrouping(

"kafka-reader");//設定executor數量為3

builder.setbolt("log-splitter", new logsplitterbolt(), 3)

.shufflegrouping("filter-bolt");//設定executor數量為5

builder.setbolt("hdfs-bolt", hdfsbolt, 2).shufflegrouping(

"log-splitter");//設定executor數量為2

// 4、啟動topology

config conf = new config();

conf.put(config.nimbus_host, nimbushost);

conf.setnumworkers(3);      //設定worker數量

stormsubmitter.submittopologywithprogressbar(topologyname, conf,

builder.createtopology());

1、通過config.setnumworkers(3)將worker程序數量設定為3,假設集群中有3個node,則每個node會執行乙個worker。

2、executor的數量分別為:

spout:5

filter-bolt:3

log-splitter:3

hdfs-bolt:2

總共為13個executor,這13個executor會被隨機分配到各個worker中去。

注:這段**是從kafka中讀取訊息源的,而這個topic在kafka中的分割槽數量設定為5,因此這裡spout的執行緒婁為5.

3、這個示例都沒有單獨設定task的數量,即使用每個executor乙個task的預設配置。若需要設定,可以:

builder.setbolt("log-splitter", new logsplitterbolt(), 3)

.shufflegrouping("filter-bolt").setnumtasks(5);

來進行設定,這5個task會被分配到3個executor中。

(四)並行度的動態調整

對storm拓撲的並行度進行調整有2種方法:

1、kill topo—>修改**—>編譯—>提交拓撲

2、動態調整

第1種方法太不方便了,有時候topo不能說kill就kill,另外,如果加幾台機器,難道要把所有topo kill掉還要修改**?

因此storm提供了動態調整的方法,動態調整有2種方法:

1、ui方式:進入某個topo的頁面,點選rebalance即可,此時可以看到topo的狀態是rebalancing。但此方法只是把程序、執行緒在各個機器上重新分配,即適用於增加機器,或者減少機器的情形,不能調整worker數量、executor數量等

2、cli方式:storm rebalance

舉個例子

storm rebalance toponame -n 7 -e filter-bolt=6 -e hdfs-bolt=8

將topo的worker數量設定為7,並將filter-bolt與hdfs-bolt的executor數量分別設定為6、8.

此時,檢視topo的狀態是rebalancing,調整完成後,可以看到3臺機器中的worker數量分別為3、2、2

五 storm調優,調整並行度

實際上就是用多執行緒。沒有真的對集群做擴容。官網介紹 storm中執行topology的實體主要有三個 worker processes 乙個supervisor可以啟多個worker。乙個topology可以執行在乙個worker或者接worker中。每個worker執行乙個topology的子集...

storm併發度理解

乙個執行中的拓撲是由什麼組成的 worker程序,executors和tasks。storm是按照下面3種主要的部分來區分storm集群中乙個實際執行的拓撲的 worker程序 executors 執行緒 以及真正實施計算的 tasks 任務 先簡單回顧一下storm幾個核心概念 同時還有幾個關鍵的...

flink之slot 並行度 任務鏈

2.並行度,乙個特定運算元的子任務的個數被稱之為其並行度,可以認為乙個流程式的並行度是 所有運算元中最大的並行度 乙個程式中,不同的運算元並行度可能不同 3.因為是資源密集型的運算元的子任務在不同的slot中,所以可以做到負載均衡。4.非資源密集型的子任務和資源密集型的子任務不被放到同乙個slot中...