标签:
并发度
一个Topology可以包含一个或多个worker(并行的跑在不同的machine上), 所以worker process就是执行一个topology的子集, 并且worker只能对应于一个top ology
一个worker可用包含一个或多个executor, 每个component (spout或bolt)至少对应于一个executor, 所以可以说executor执行一个compenent的子集, 同时一个executor只能对应于一个component
Task就是具体的处理逻辑对象, 一个executor线程可以执行一个或多个tasks
但一般默认每个executor只执行一个task, 所以我们往往认为task就是执行线程, 其实不是。
task代表最大并发度, 一个component的task数是不会改变的, 但是一个componet的executer数目是会发生变化的(storm rebalance命令),
task数>=executor数, executor数代表实际并发数
task代表最大并发度, builder.setBolt("bolt", new MyBolt(),1).setNumTasks(2).directGrouping("spout"); executor数代表实际并发数 ,实际并发数还是1 最大并发度为2 左边两个task是独立的 右边包含两个task,表示一个execute 通常不用理会task,只设置execute
Config conf = new Config(); conf.setNumWorkers(2); topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2) .setNumTasks(4) .shuffleGrouping("blue-spout"); topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6) .shuffleGrouping("green-bolt"); StormSubmitter.submitTopology( "mytopology", conf, topologyBuilder.createTopology() );
通过setBolt和setSpout一共定义2+2+6=10个executor threads
并且同setNumWorkers设置2个workers, 所以storm会平均在每个worker上run 5个executors
而对于green-bolt, 定义了4个tasks, 所以每个executor中有2个tasks
动态设置并发度 Storm支持在不restart topology的情况下, 动态的改变(增减)worker processes的数目和executors的数目, 称为rebalancing. 通过Storm web UI, 或者通过storm rebalance命令 # Reconfigure the topology "mytopology" to use 5 worker processes, # the spout "blue-spout" to use 3 executors and # the bolt "yellow-bolt" to use 10 executors. storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10 其中mytopology 是topo名,blue-spout对应setSpout("blue-spout“…)
标签:
原文地址:http://www.cnblogs.com/thinkpad/p/5075561.html