Understanding the Parallelism of a Storm Topology What makes a running topology: worker processes, executors and tasks 在一個Strom集群中,實際運行一個topology有三個主要 ...
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