Storm高并发介绍

[size=medium][b]并发度:[/b][/size]
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
[img]http://dl2.iteye.com/upload/attachment/0124/3810/1476db21-5de0-3271-8e46-4d4397fddc22.png[/img]

[size=medium]示例:[/size]

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());

[img]http://dl2.iteye.com/upload/attachment/0124/3812/26a054b7-0d42-3ffc-bdde-eecc204e2ea8.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值