Understanding the Parallelism of a Storm Topology
What makes a running topology: worker processes, executors and tasks
在一個Strom叢集中,實際執行一個topology有三個主要的實體
- Worker processes
- Executors (threads)
- Tasks
下面是一張草圖簡單說明他們之間的關係:
A worker process executes a subset of a topology.
一個worker程式屬於一個特定的topology並且可能執行一個或者多個executors
一個執行中的topology由執行在叢集中的許多機器上的這樣的程式組成
一個executor是被一個worker程式啟動的一個執行緒。它可能執行一個或多個任務。
一個task執行實際的資料處理——在你的程式碼中實現的每一個spout或bolt執行許多工。一個元件的任務數量總是不變的,這是自始至終貫穿整個topology的,但是一個元件的executors(threads)的數量是可以隨時改變的。也就是說,下面這個表示式總是true:#threads ≤ #tasks。預設情況下,task的數量和executor的數量是相等的,也就是說每個執行緒執行一個任務。
Configuring the parallelism of a topology
注意,Storm中的術語"parallelism"也被叫做parallelism hint,表示一個元件初始的executor(threads)數量。
在這篇文件中我們將用"parallelism"來描述怎樣配置executor的數量,怎樣配置worker程式的數量,以及task的數量。
配置的方式有多種,它們之間的優先順序順序為:defaults.yaml
< storm.yaml
< topology-specific configuration < internal component-specific configuration < external component-specific configuration
下面是一個例子
上面這段程式碼片段配置了一個叫green-bolt的Bolt,初始數量為2個executors並且關聯4個task。也就是說,每個executor量執行2個task。
如果你沒有明確配置task的數量,那麼Strom將用預設的配置來執行,即:每個executor執行一個task。
Example of a running topology
下面這幅插圖顯示了一個簡單的topology。這個topology由三個元件組成:一個叫"BlueSpout"的spout和兩個bolt,分別叫"GreenBolt"和"YellowBolt"。
程式碼如下
How to change the parallelism of a running topology
補充一個Java API
參考 http://storm.apache.org/releases/1.1.1/Understanding-the-parallelism-of-a-Storm-topology.html