storm源碼之理解Storm中Worker、Executor、Task關係

原文地址:http://www.cnblogs.com/yufengof/p/storm-worker-executor-task.html

Storm在集羣上運行一個Topology時,主要通過以下3個實體來完成Topology的執行工作:
1. Worker(進程
2. Executor(線程
3. Task

下圖簡要描述了這3者之間的關係:


1個worker進程執行的是1個topology的子集(注:不會出現1個worker爲多個topology服務)。1個worker進程會啓動1個或多個executor線程來執行1個topology的component(spout或bolt)。因此,1個運行中的topology就是由集羣中多臺物理機上的多個worker進程組成的。

executor是1個被worker進程啓動的單獨線程。每個executor只會運行1個topology的1個component(spout或bolt)的task(注:task可以是1個或多個,storm默認是1個component只生成1個task,executor線程裏會在每次循環裏順序調用所有task實例)。

task是最終運行spout或bolt中代碼的單元(注:1個task即爲spout或bolt的1個實例,executor線程在執行期間會調用該task的nextTuple或execute方法)。topology啓動後,1個component(spout或bolt)的task數目是固定不變的,但該component使用的executor線程數可以動態調整(例如:1個executor線程可以執行該component的1個或多個task實例)。這意味着,對於1個component存在這樣的條件:#threads<=#tasks(即:線程數小於等於task數目)。默認情況下task的數目等於executor線程數目,即1個executor線程只運行1個task。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章