storm(四) 并行度

概念

worker

  • 一个实体机可以运行一个或者多个worker
  • 一个worker只能运行一个topology上的部分或全部component
  • 一个worker是一个独立的进程
  • 在运行过程中可以调整worker的数量

executor

  • 一个worker中可以运行多个executor
  • 一个executor是一个线程
  • 一个executor可以运行一个或者多个task,这些task必须是同一类型
  • executor的数量<=task的数量
  • 默认情况下一个executor中运行一个task
  • executor的数量在topology的运行过程中可以动态调整,storm的并行度调整主要针对的就是executor

task

  • 具体操作数据的bolt或者spout
  • 在整个topology运行状态中,task的数量是固定的不能改变的

这里写图片描述

对于并行度的概念,最准确的还是要看官方的:http://storm.apache.org/releases/1.2.2/Understanding-the-parallelism-of-a-Storm-topology.html

并行度调整

调整并行度有几种方法,这里我选择的是直接在代码中进行设置

设置worker

  • 关闭acker,将worker进程设置成2
  • 由于现在有两个worker,两个executor(见下面截图),所以两个executor被平均分配给了两个worker,在我们这里就是一个生产一个消费(从打印的日志可以看出来)
Config config=new Config();
config.setNumWorkers(2);
config.setNumAckers(0);
StormSubmitter.submitTopology("SumTopology",config,topology);

 

 

设置executor

  • 默认一个executor对应一个task,这里我设置executor的数量为3,所以task也为3
builder.setBolt("countNum",new SumBolt(),3).shuffleGrouping("createNum");

 

设置task

  • 默认情况下一个executor下只有一个task,但是当设置的task的数量大于executor的时候,一个executor上就可能有多个task
 builder.setSpout("createNum",new NumSpout());
 builder.setBolt("countNum",new SumBolt(),3)
         .setNumTasks(6)
         .shuffleGrouping("createNum");

设置acker

  • 设置acker的方式在第一个例子中已经示范过,这里就不在演示了
  • 不过一般并不建议将acker关闭,这样将无法保证数据的可靠性

动态设置并行度

  • 这里我使用的是命令行的方式,至于storm ui的方式没搞懂
  • 这里我将worker改成1个,createNum改为2个executor,countNum改为2个executor注意这里没有调整task
  • 所谓的并行调整其实就是重新分配:task所在的executor,executor所在的worker。task是真正做事的bolt、spout。所以如果task数量不够,即使将executor、worker的数量设置的再大也没有用
docker run --link nimbus:nimbus -it --rm storm 
storm rebalance SumTopology -n 1 -e createNum=2 -e countNum=2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值