美文网首页Storm
Storm基础(八)理解拓扑的并发

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

作者: quiterr | 来源:发表于2017-04-06 16:37 被阅读72次

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

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

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

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


      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

    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。

    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基础(八)理解拓扑的并发

        本文链接:https://www.haomeiwen.com/subject/jaqpottx.html