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。
本文轉自 張沖andy 部落格園部落格,原文連結: http://www.cnblogs.com/andy6/p/8470017.html ,如需轉載請自行聯系原作者