初識Strom:
一、原理架構圖
一個連續運行的主節點組織若干節點工作,構成了一個Storm集群。
在 Storm 集群中,有兩類節點:主節點(master node)和工作節點(worker nodes)。
主節點運行著一個叫做 Nimbus 的守護進程,負責在集群中分發代碼,為工作節點分配任務,並監控狀態。Supervisor守護進程作為拓撲的一部分運行在工作節點上。每一個工作節點上面運行一個叫做Supervisor的節點。Supervisor會監聽分配給它那臺機器的工作,根據需要啟動/關閉工作進程。每一個工作進程執行一個topology的一個子集;一個運行的topology由運行在很多機器上的很多工作進程組成。Nimbus和Supervisor之間的所有協調工作都是通過Zookeeper集群完成。另外,Nimbus進程和Supervisor進程都是快速失敗(fail-fast)和無狀態的。所有的狀態要麼在zookeeper裡面, 要麼在本地磁盤上。這也就意味著你可以用kill -9來殺死Nimbus和Supervisor進程, 然後再重啟它們,就好像什麼都沒有發生過。這個設計使得Storm異常的穩定。相關概念的深度解讀:
Nimbus:負責資源分配和任務調度。Supervisor:負責接受nimbus分配的任務,啟動和停止屬於自己管理的worker進程。Worker:運行具體處理組件邏輯的進程。拓撲是在一個或多個工作進程(worker processes)中運行的,但一個worker只會運行一個topology,不會同時為多個topology服務。每個工作進程都是一個實際的 JVM 進程,並且執行拓撲的一個子集。Storm會在所有的worker 中分散任務,以便實現集群的負載均衡。最後,來張圖來展示它們的關係:
現在想象一下,很容易在整個 Storm 集群定義每個 bolt 和 spout 的並行性級別,因此你可以無限的擴展你的拓撲結構。通過增加Storm的並行度,可以大大提高程序運行的效率。
二、大白話理解Storm並行度:worker、executor和task之間的工作機制
1、引言
默認情況下,1個topology默認使用1個worker進程,每個worker進程默認啟動1個executor,每個executor默認啟動1個task。
註釋:一旦啟動了一個topology,worker是不能動態調整的,但是executor是可以動態調整的!!!
即:進程數固定,線程可以動態調整!!!
new一個Spout就是一個task;
new一個bolt又是一個task;
==>一個線程裡面就有了兩個task!!!
==>為了提高並行度:可以開多個worker,多個executor,而配置多個task(Spout或bolt)是沒有效果,只是為了增加邏輯性。
2、通過自定義配置改變Strom的並行度
我們先放一個官網的topology示例,通過該實例配置來一步步的介紹這個理解起來稍微有些複雜的概念:
Config conf = new Config();
conf.setNumWorkers(2); // 為此 topology 配置兩個 worker 進程
topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // blue-spout 並行度=2(2個executor)
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2) // green-bolt 並行度=2
.setNumTasks(4) // 為此 green-bolt 配置 4 個 task
.shuffleGrouping("blue-spout");
topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6) // yellow-bolt 並行度=6
.shuffleGrouping("green-bolt");
StormSubmitter.submitTopology(
"mytopology",
conf,
topologyBuilder.createTopology()
);
我們先解讀一下上面配置的含義:
我們在給出官方的圖,看下官方的總結:
可以看出,這個圖片完整無缺地還原了代碼裡設定的 topology 結構:
圖左最大的灰色方框,表示這個 topology;topology 裡面剛好有兩個白色方框,表示2個 worker 進程;每個 worker 裡面的灰色方框表示 executor 線程,可以看到2個 worker 方框裡各有5個 executor;為什麼各有5個executor呢?因為代碼裡面指定的 spout 並行度=2,green-bolt並行度=2,yellow-bolt並行度=6,加起來剛好是10,而配置的 worker 數量為2,那麼自然地,這10個 executor 會均勻地分配到2個 worker 裡面;每個 executor 裡面的黃藍綠(寫著Task)的方框,就是最小的處理單元 task 了。我們重點看綠色的 Task 方框,與其他 Task 不同的是,兩個綠色方框同時出現在一個 executor 方框內。根據上面的解釋,我們再通過一個圖進行總結:
希望,我已經講明白了,如果不明白,或者講的有什麼問題,歡迎留言……
下節我們將學習Storm的單機環境和分佈式環境的搭建、如何提交/查看/殺死Storm作業、Storm UI界面參數介紹,並實戰演示storm並行度參數調優以增強我們對Storm並行度的理解……