Storm高并发介绍

并发度:
  worker:指的是component (spout或bolt),并行的跑在不同的machine上的topology子集。
  一个Topology可以包含一个或多个worker,worker process就是执行一个topology的子集, 并且worker只能属于一个topology。

设置worker数量
Config conf = new Config();
conf.setNumWorkers(2); 


  executor:worker的执行线程。
  一个worker可用包含一个或多个executor, 每个component (spout或bolt)至少对应于一个executor, 所以可以说executor执行一个组件compenent(spout||bolt)的子集, 同时一个executor只能对应于一个component。

设置executor方式:
//parallelism_hint即设置的executor线程数
builder.setSpout("spout", new MySpout(), 1);
setBolt(String id, IRichBolt bolt, Number parallelism_hint);


Task:是具体的处理逻辑对象, 一个executor线程可以执行一个或多个tasks。
一般默认每个executor只执行一个task, 所以我们往往认为task就是执行线程, 其实不是。
task代表最大并发度, 一个component的task数是不会改变的, 但是一个componet的executer数目是会发生变化的(storm rebalance命令)。可以理解与executor一样,增加并发数
task数>=executor数, executor数代表实际并发数

设置task方式:
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout");


总之:
一个worker可以包含多个executor
一个executor可以包含多个task


示例:
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());





猜你喜欢

转载自javafu.iteye.com/blog/2369461