1. storm集羣啓動後,nimbus進程、supervisor進程,分別向zookeeper進行註冊
- nimbus做爲服務方,往zookeeper對應目錄寫job配置信息文件
- supervisor做爲客戶端,監控zookeeper對應的目錄
2. 通過strom client客戶端提交job到nimbus,其中包括:
- 指定spout、bolt實現類,以及並行數量
- 各個spout、bolt的依賴關係和分組關係
- Storm配置信息、運行方式(如:服務器提交或本地提交)
- 由哪幾臺supervisor(機器),啓動多少個worker,多少並行線程數
- superviso和worker對應的ip地址和端口號
- job程序
4. zookeeper監控到nimbus的寫文件操作後,發送事件通知所有supervisor,對應的supervisor收到事件通知後,去zookeeper指定目錄獲取worker和job信息,並啓動相應數量的worker和Exectuor(一般情況下,一個Executor對應一個Task任務,一個Task可以是一個spout對象實例或一個bolt對象實例)
5. Executor啓動後,通過spout去讀取數據源(數據源可能是:消息中間件、數據庫、文件等數據)
6. 在上一步的基礎上,spout讀取外部數據源信息,通過調用nextTuple方法,進行任務處理,然後將處理結果發送給Topology程序,Topologyt程序由Storm框架將結果發往Storm的消息隊列,然後Storm框架去消費隊列中的一個消息,然後去調用下一個依賴的bolt,通過反序列化將Topology對象信息傳bolt對象,然後去調用bolt的execute方法進行處理
7. Exeutor按照spout和bolt的依賴關係,持續處理數據,直接到整個Topology執行結束(在Storm中通過UI界面或Storm命令結束Topology)