【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