Storm基础(八)理解拓扑的并发

原文链接Understanding-the-parallelism-of-a-Storm-topology

运行中的topology由这些组成:worker processes, executors and tasks

Storm集群的topology主要由以下实体组成:

  1. Worker processes
  2. Executors (threads)
  3. Tasks
    它们的关系如下:


    Storm基础(八)理解拓扑的并发_第1张图片
    The relationships of worker processes, executors (threads) and tasks in Storm

Worker processes执行topology的一个子集,它属于某个topology,可以运行一个或多个executors。在集群中运行的topology一般都有多个Worker processes跑在多个机器上。

executor 是Worker 创建的线程,它可能会运行同一个组件的(spout或bolt)一个或多个任务。

task真正负责数据处理。你代码中实现的spout或bolt在集群中以task对形式执行。

在topology的整个生命周期中,task的数量都不会变,但是executors(threads)的数量可能会经常变化。下面这个等式总是正确的:#threads ≤ #tasks
默认情况下,task和executors数量相同,也就是说,Storm会每个线程执行一个任务。

配置topology的并行度

Storm的并行度指的是组件最开始的executor数量。在这篇文章中,并行度是一个更宽泛的概念,你不仅可以配置executor的数量,也可以配置worker和task的数量。

下面的章节给出了多种配置选项以及如何在代码中设置它们。Storm目前的配置获取顺序:defaults.yaml < storm.yaml < topology-specific configuration < internal component-specific configuration < external component-specific configuration

Number of worker processes

  • 配置选项:TOPOLOGY_WORKERS
  • 如何在代码中设置(例子):Config#setNumWorkers

Number of executors (threads)

  • 配置选项:无(给setSpout或setBolt传parallelism_hint参数)
  • 如何在代码中设置:
    TopologyBuilder#setSpout()
    TopologyBuilder#setBolt()

Number of tasks

  • 配置选项:TOPOLOGY_TASKS
  • 如何在代码中设置:
    ComponentConfigurationDeclarer#setNumTasks()

代码片段:

topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
               .setNumTasks(4)
               .shuffleGrouping("blue-spout");

上面的代码配置Storm以2个executors (threads)和4个tasks来运行GreenBolt,也就是每个线程跑两个任务。

一个正在运行的topology的例子

例子中但topology包含三个组件:BlueSpout、GreenBolt和YellowBolt。BlueSpout的输出交给GreenBolt,GreenBolt的输出交给YellowBolt。

Storm基础(八)理解拓扑的并发_第2张图片
example-of-a-running-topology

如下是相关配置代码:

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

当然,Storm也有其他的配置设置来控制topology的并发度,包括:

  • TOPOLOGY_MAX_TASK_PARALLELISM: 这个配置限制了每个组件的最大executors数量。一般在本地模式下运行topology时,会用这个配置来限制创建的线程数。可以这样设置:Config#setMaxTaskParallelism()。

如何更改运行中的topology的并发度

Storm的一大优点就是可以不用重启集群或topology就更改worker和executors的数量。这种操作称为再平衡。
有两种再平衡topology的方式:

  1. Storm web UI
  2. CLI
    这是使用CLI的例子:
//Reconfigure the topology "mytopology" to use  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

你可能感兴趣的:(Storm基础(八)理解拓扑的并发)