聲明:我寫了the article你引用你的問題上面。
但是我對「任務」的概念有些困惑。任務是組件的運行實例(噴嘴還是螺栓)?實際上有多個任務的執行者是說執行者多次執行相同的組件,我是否正確?
是的,是的。
此外,在一般的並行性意義上,Storm會爲噴口或螺栓產生一個專用線程(執行程序),但是具有多個任務的執行程序(線程)對並行性有什麼貢獻?
運行每執行多個任務不增加並行的水平 - 執行人總是有它使用其所有的任務,這意味着對任務的執行順序運行一個線程。
正如我在文章中寫道:請注意:
- 執行線程的數量是可以改變的拓撲結構開始後(見
storm rebalance
命令)。
- 拓撲的任務數量是靜態的。
並且根據定義,存在#executors <= #tasks
的不變量。
因此,每個執行程序線程執行2個任務的一個原因是,您可以靈活地在未來拓展/擴展通過storm rebalance
命令的拓撲,而無需使拓撲脫機。例如,想象一下,從15臺機器的風暴集羣開始,但已經知道下週還會添加10個盒子。在這裏,你可以選擇在已經在15個初始盒子上的25臺機器的預期並行水平上運行拓撲(當然這比25盒子要慢)。一旦集成了額外的10個盒子,您就可以通過storm rebalance
拓撲結構充分利用所有25個盒子,而無需任何停機時間。
對每個執行器運行2+任務的另一個原因是(主要是功能性)測試。例如,如果你的開發機器或CI服務器只有足夠強大的運行能力,比如2個執行器以及機器上運行的所有其他東西,那麼仍然可以運行30個任務(這裏是每個執行器15個),以查看代碼您的自定義Storm組合按預期工作。
實際上,我們通常每個執行者運行1個任務。
PS:請注意,Storm實際上會產生a few more threads behind the scenes。例如,每個執行器都有自己的「發送線程」,負責處理傳出的元組。還有例如「系統級」的後臺線程。 acking與「你的」線程一起運行的元組。 IIRC除了「你的」線程之外,Storm UI還會計算這些線程。
我已閱讀文檔三次以清除相同的混淆,並解決了我的問題。 – pavan