Storm可以支持topology任务的动态调整,动态调整包括Task和Worker两个维度
我用的jstorm2.1.0
命令格式为:
jstorm rebalance [-r] TopologyName [DelayTime] [NewConfig]
例如 : jstorm rebalance -r SequenceTest conf.yaml参数说明:
-r: 对所有task做重新调度,注意不加-r不能重新分配
TopologyName: Topology任务的名字
DelayTime: 开始执行动态调整的延迟时间,默认是5分钟
NewConfig: Spout, Bolt, Acker, Worker的新配置(官网说当前仅支持yaml格式的配置文件,看代码支持后缀prop和yaml)
conf.yaml定义为如下格式,注意并发数要定义成json格式,可以不写全部的只写需要调整的bolt
topology.workers: 4
topology.acker.executors: 4
topology.spout.parallelism:{
"spout1" : 2
}
topology.bolt.parallelism:{
"bolt1" : 8,
"bolt2" : 2
}
执行命令后不要急,命令里么有写DelayTime的话,默认总共会经历2个五分钟才完成调整,我们看看nimbus日志,发现
首先提示
Begin to rebalance noticewait_time:null, reassign: true, new worker/bolt configuration:{"topology.workers":1,"topology.bolt.parallelism":{"calc":6}}
Delaying event rebalancing for 300 secs for notice-1-1481825179
。。。
然后等待5分钟后开始正式进行rebanlance了,日志会显示重新分配的并发信息,新增了worker拉,并发数变成多少啦,然后会再次出现
Delaying event rebalancing for 300 secs for notice-1-1481825179
再过5分钟就调整完成了