1. 程式人生 > >【Storm總結-2】關於Storm 中Topology的併發度的理解

【Storm總結-2】關於Storm 中Topology的併發度的理解

主要思想來源於storm的專案頁面: https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topology

其中加入了一些個人的理解,所以就把文章mark成原創了,實際上大部分還是人家的東西。其實翻譯這個文章的人也挺多,我看了幾個,總是感覺有點繞,所以乾脆自己總結一下。目標是簡單明瞭的說清楚Storm中Topology在允許過程中的併發機制。當然,目標是好的,具體寫出來能否實現目標,就無所謂了,盡力就好:)

---------
概念理解

原文中用了一張圖來說明在一個storm cluster中,topology執行時的併發機制。

其實說白了,當一個topology在storm cluster中執行時,它的併發主要跟3個邏輯實體想過:worker,executor 和task

1. Worker 是執行在工作節點上面,被Supervisor守護程序建立的用來幹活的程序。每個Worker對應於一個給定topology的全部執行任務的一個子集。反過來說,一個Worker裡面不會執行屬於不同的topology的執行任務。

2. Executor可以理解成一個Worker程序中的工作執行緒。一個Executor中只能執行隸屬於同一個component(spout/bolt)的task。一個Worker程序中可以有一個或多個Executor執行緒。在預設情況下,一個Executor執行一個task。

3. Task則是spout和bolt中具體要乾的活了。一個Executor可以負責1個或多個task。每個component(spout/bolt)的併發度就是這個component對應的task數量。同時,task也是各個節點之間進行grouping(partition)的單位。

 

併發度的配置
有多種方法可以進行併發度的配置,其優先順序如下:

defaults.yaml < storm.yaml < topology 私有配置 < component level(spout/bolt) 的私有配置

至於具體怎麼配置,至今拷貝過來大家看看便知:
設定worker數量

    Description: 在當前storm cluster中給這個topology建立的worker數量
    Configuration option: TOPOLOGY_WORKERS
    How to set in your code (examples):
        Config#setNumWorkers

設定executor數量

 


    Description: 給指定component建立的executor數量
    Configuration option: ?
    How to set in your code (examples):
        TopologyBuilder#setSpout()
        TopologyBuilder#setBolt()
        Note that as of Storm 0.8 the parallelism_hint parameter now specifies the initial number of executors (not tasks!) for that bolt.

設定task數量

    Description: 給指定 component 建立的task數量
    Configuration option: TOPOLOGY_TASKS
    How to set in your code (examples):
        ComponentConfigurationDeclarer#setNumTasks()

Here is an example code snippet to show these settings in practice:

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

一個執行時的topology的例子

怎麼樣在執行過程中修改一個topology的併發度
Storm支援在不restart topology的情況下, 動態的改變(增減)worker processes的數目和executors的數目, 稱為rebalancing.

主要有兩種方法可以rebalance一個topology:

    使用Storm web UI 來 rebalance topology.
    使用CLI 工具 rebalance topology,一個例子如下:

# 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