天天看點

Storm-源碼分析-Topology Submit-Supervisor

supervisor很簡單, 主要管兩件事, 

當assignment發生變化時, 從nimbus同步topology的代碼到本地 

當assignment發生變化時, check workers狀态, 保證被配置設定的work的狀态都是valid

兩個需求, 

1. 當assignment發生變化時觸發 

2. 因為比較耗時, 背景執行 

    建立兩個event-manager, 分别用于背景執行mk-synchronize-supervisor和sync-processes

mk-synchronize-supervisor, 比較特别的是内部用了一個有名字的匿名函數this來封裝這個函數體 

剛開始看到非常詫異, 其實目的是為了可以在sync-callback中将這個函數add到event-manager裡面去 

即每次被調用, 都需要再一次把sync-callback注冊到zk, 以保證下次可以被繼續觸發

sync-processes用于管理workers, 比如處理不正常的worker或dead worker, 并建立新的workers 

首先從本地讀出workers的hb, 來判斷work狀況, shutdown所有狀态非valid的workers 

并為被assignment, 而worker狀态非valid的slot, 建立新的worker

1. read-allocated-workers

2. wait-for-workers-launch

對reassign-executors中的每個new_work_id調用launch-worker

最終調用wait-for-workers-launch, 等待worder被成功launch

邏輯也比較簡單, check hb, 如果沒有就不停的sleep, 至到逾時, 列印failed to start