理解Storm Topology的并发机制

运行时topology的组成:worker processes、executors(执行者线程)以及tasks

Storm区分了以下三个主要的实体并用来在Storm集群上运行起一个topology:

1.Worker processes

2.Executors(线程)

3.Tasks

下面是这3者关系的一个简单示例:


一个worker process负责执行topology的部分子集。单个worker process归属于一个特定的topology并且可以为该topology的一个或多个组件(spouts或者bolts)运行一个或者多个executors。一个运行的topology由Storm集群中多台机器上运行着的多个processes(进程)组成。

一个executor其实就是由一个worker process生成的线程。executor将会为同一个组件(spout/bolt)运行多个tasks(任务)。

一个task负责进行数据处理---我们的代码实现的每个spout或者bolt会在集群上执行许多的任务。一个组件的tasks的数量在topology的整个生命周期中都是一样的。但是一个组件的executors的数量却会改变。这就意味着出出现这样一种情形:#threads <= #tasks。默认情况下,executor的数量与task的数量会设置成一样。例如:Storm中会每个executor运行一个task。

topology的并发设置

注意Storm中的术语"parallelism"被用来特指Storm中的parallelism hint,parallelism hint的意思是一个组件的初识executor的数量。这个文档中我们就用"parallelism"(并发)这个更宽泛的术语来描述:不仅仅限于executors的数量,还有worker processes的数量以及tasks的数量。在用"parallelism"来标识正常或者更特指的定义时,我们会特别提醒的。


接下来对多种配置选项的一个概览。我在Storm配置概览这篇文章中提到了Storm配置的优先级:defaults.yaml<storm.yaml<topology-specific configuration<internal component-specific configuration<external component-specific configuration。


worker processes的数量

·描述:为topology在集群机器上创建多少work processes。

·配置项:TOPOLOGY_WORKERS

·如何在代码中设置


executors(线程)的数量
·描述:每个组件产生多少executors
·配置项:无(通过setSpout或者setBolt中的parallelism_hint参数设置)

task的数量

·描述:为每个组件创建多少task

·配置项:TOPOLOGY_TASKS

·如何在代码中设置(只是个例子):

  • 下面给出了这些配置的一个例子

    topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
                   .setNumTasks(4)
                   .shuffleGrouping("blue-spout");
    在代码中我们配置了Storm中的bolt(GreenBolt)其中初始的executor数量为2以及相关taks数为4。Storm将会使每个executor运行两个task。如果没有显式的配置task数,Storm会每个executor运行一个task。


    一个运行中的topology示例
    下面这个示例展示了一个简单的topology的运行。这个topology有3个组件组成:一个spout(BlueSpout)以及两个bolt(GreenBolt和YellowBolt)。由BlueSpout发送线性给GreenBolt,然后,GreenBolt发送消息给YellowBolt。


    下面给出相应代码:
    Config conf = new Config();
    conf.setNumWorkers(2); // use two worker processes
    
    topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 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()
        );
    可以看到,BlueSpout与YellowBolt未设置task数,故默认task数与executor数相同。而GreenBolt设置了task数为4,故每个executor运行两个task。

    Storm有额外的配置设置来控制topology的并发数:
    · TOPOLOGY_MAX_TASK_PARALLELISM:这个设置对每个组件能生成的executor数设置了一个上限。这个典型的是在测试的时候,我们在本地模式下限制线程的数量。我们可以通过   Config#setMaxTaskParallelism() 来进行设置。

    如何改变一个运行中的topology的并发量 
    Storm中的一个灵活的特征就是我们可以在不重启集群或者topology的情况下改变worker proceses以及executors的数量。这个过程叫做rebalancing(再均衡)
    我们有两个选项来进行再均衡:
    1.用Storm提供的web界面
    2.通过命令行(CLI)工具
    下面给出命令行工具的例子:
    ## 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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值