天天看點

JStorm-2.1.1源碼分析--Topology送出(下)

       上篇文章已經介紹了ServiceHandler.submitTopologyWithOpts()方法,在該方法中,會執行個體化一個TopologyAssignEvent,相當于建立了一個topology級别的作業,然後将其儲存到TopologyAssign的任務隊列中,具體代碼如下:

JStorm-2.1.1源碼分析--Topology送出(下)

       TopologyAssign是Jstorm一個任務配置設定器,它會根據配置和Topology中spout和bolt的關系來進行Task的建立和配置設定,但是具體任務的建立和非配并發其自身完成的,二是調用Jstorm自身的排程器完成的,當然Jstorm允許使用者根據自己業務需求定制排程器。TopologyAssign類是一個實作了Runnable接口的背景線程,随着Nimbus啟動,主要完成topology作業配置設定、備份和作業均衡的作用,當天還是通過Jstorm的排程器來完成的,其run方法會采用阻塞的方式擷取自身作業隊列中的作業,然後進行作業配置設定,其作業配置設定核心業務如下:

JStorm-2.1.1源碼分析--Topology送出(下)
JStorm-2.1.1源碼分析--Topology送出(下)

        Nimbus已經将任務配置設定好了,并且建立到ZK上,此時就需要supervisor認領自己的任務了,supervisor擷取任務的具體邏輯封裝在SyncSupervisorEvent,其也是一個背景線程,會不停擷取ZK上(JSTORM_ROOT/assignments下)的全部任務,然後把自己的任務儲存到本地磁盤上,再通過NimbusClient把topology的代碼儲存到本地,然後啟動worker啟動線程來執行任務,具體業務邏輯代碼如下:

JStorm-2.1.1源碼分析--Topology送出(下)
JStorm-2.1.1源碼分析--Topology送出(下)
JStorm-2.1.1源碼分析--Topology送出(下)

        SyncSupervisorEvent将自己的作業選出來,并儲存到本地之後,再由SyncProcessEvent來啟動worker執行具體的作業,SyncProcessEvent主要幹兩件事,啟動新的worker,殺死無用的worker,此處要涉及啟動新的Worker,具體業務邏輯如下:

JStorm-2.1.1源碼分析--Topology送出(下)

       以上就是Jstorm送出一個topology的過程,這兩篇文章隻是給出了一條主線,具體的代碼邏輯并未詳細給出,後續會不斷完善,同時關于Jstrom的排程器後續也會給出詳細分析。

繼續閱讀