storm之 Storm 工做原理

Storm 工做原理 


Storm簡介 
1.Storm是一套分佈式的、可靠的,可容錯的用於處理流式數據的系統。 
2.Storm也是基於C/S架構來進行工做的,C負責將數據處理的方式的jar(Topology)發送給S,S解析C發送過來的jar(Topology),並按必定規則jar變成多個Task((Spout/Bolt)),生成相關的進程和線程運行裏面的Task。 


相關述語說明: 
1.Topology(拓撲):storm中運行的一個實時應用程序(Storm的一個任務單元),由於各個組件間的消息流動造成邏輯上的一個拓撲結構(因此叫Topology)。Topolog是一組由Spouts(數據源)和Bolts(數據操做)經過Stream Groupings進行鏈接組成的圖。 
2.tuple(元組):一次消息傳遞的基本單元。原本應該是一個key-value的map,可是因爲各個組件間傳遞的tuple的字段名稱已經事先定義好,因此tuple中只要按序填入各個value就好了,因此就是一個value list. 
3.Stream:以tuple爲單位組成的一條有向無界的數據流。(就是tuple在各個組件中流動時的描述) 
4.Spout組件:就是一個繼承了某個基類的類,裏面有類的方法進行相關的操做,用於獲取數據,並傳遞數據到Bolt。 
5.Bolt組件:就是一個繼承了某個基類的類,裏面有類的方法進行相關的操做,用於對Spout組件發送過來的數據進行處理。 
6.Worker進程,用於運行Topology子集(可能Topology的不一樣組件(Spout/Bolt)會放在不一樣的Worker進程來運行)的進程。 
7.executor線程,爲Worker進程中的一個線程,executor可能會同時運行多個組件(Spout/Bolt),固然同一個executor運行的組件類型是同樣的。 
8.Task,任務,就是組件(Spout/Bolt),通常是一個executor線程運行一個Task 
9.Nimbus進程,控制節點(Nimbus節點),主結點運行一個叫作Nimbus的守護進程,它負責在集羣內分發代碼,爲每一個工做結點指派任務和監控失敗的任務。 
10.Supervisor進程,工做節點(Supervisor節點),工做結點運行一個叫作Supervisor的守護進程,每一個工做節點都是topology中一個子集的實現。 
11.zookeeper,集羣協調軟件(C/S),是完成nimbus和supervisor之間協調的服務。 
12.storm UI,只提供對topology的監控和統計。 


架構圖: 
 


topology工做原理 
1.Storm集羣中有兩種節點,一種是控制節點(Nimbus節點),另外一種是工做節點(Supervisor節點)。 
2.全部Topology任務的 提交必須在Storm客戶端節點上進行(須要配置 storm.yaml文件),由Nimbus節點分配給其餘Supervisor節點進行處理。 
3.Nimbus節點首先將提交的Topology進行分片(Spout/Bolt),分紅一個個的Task,並將Task和Supervisor相關的信息提交到 zookeeper集羣上。 
4.Supervisor會去zookeeper集羣上認領本身的Task,通知本身的Worker進程進行Task的處理。 


topology工做流程 
1.提交Topology後,Storm會把代碼首先存放到Nimbus節點的inbox目錄下,以後,會把當前Storm運行的配置生成一個 stormconf.ser文件放到Nimbus節點的stormdist目錄中,在此目錄中同時還有序列化以後的Topology代碼文件 
2.在設定Topology所關聯的Spouts和Bolts時,能夠同時設置當前Spout和Bolt的executor數目和task數目,默認狀況下,一個Topology的task的總和是和executor的總和一致的。以後,系統根據worker(Topology的worker配置參數)的數目,儘可能平均的分配這些task的執行。worker在哪一個supervisor節點上運行是由storm(隨機申請到可用的就OK)自己決定的。 
3.Storm看一下那些Worker進程可用,就申請worker(Topology的worker配置參數)的數目給這個Topology。 
4.Storm儘可能平均的分配這些task到worker。 
5.任務分配好以後,Nimbus節點會將任務的信息提交到zookeeper集羣,同時在zookeeper集羣中會有workerbeats節點,這裏存儲了當前Topology的全部worker進程的心跳信息。 
6.Supervisor 節點會不斷的輪詢zookeeper集羣,在zookeeper的assignments節點中保存了全部Topology的任務分配信息、代碼存儲目 錄、任務之間的關聯關係等,Supervisor經過輪詢此節點的內容,來領取本身的任務,啓動worker進程運行。 
7.一個Topology運行以後,就會不斷的經過Spouts來發送Stream流,經過Bolts來不斷的處理接收到的Stream流,Stream流是無界的。 
8.最後一步會不間斷的執行,除非手動結束Topology。 



架構

相關文章
相關標籤/搜索