通過啟動腳本已經找到了TaskManager 的啟動類org.apache.flink.runtime.taskexecutor.TaskManagerRunner 來看一下它的main方法中 最後被start了起來 start其實是將taskManager 端的RPC服務起起來了 看一下TaskM ...
通過啟動腳本已經找到了TaskManager 的啟動類org.apache.flink.runtime.taskexecutor.TaskManagerRunner
來看一下它的main方法中
最後被start了起來
start其實是將taskManager 端的RPC服務起起來了
看一下TaskManagerRunner的構造方法中
調用了這個startTaskManager()方法,在這個方法中又調用了
在這個方法中.fromConfiguration()
看到創建了一個networkEnevironment並且把它起了起來其中
因為flink的網路是走的netty,可以看到它會初始化netty的客戶端和服務端用於網路通信並且傳入了bufferPool池,這個在以後隨緣更新到 反壓 會詳細的研究
回到fromConfiguration()方法
network.start以後它又
創建了記憶體管理類memoryManager和io管理類IOmanager, 這裡以後隨緣更新講到記憶體和IO單獨說
需要註意的是這裡的Async非同步IO,其實目前flink只有這一種非同步的IO管理器
創建了定時器服務,定時器留到視窗在講
回到startTaskManager()方法的最後
這個類TaskExecutor就是前面說的包含了RPC介面的類主要是實現了介面
裡面包含了一些重要的方法的實現,來看一下有哪些重要的方法
可以看到這是請求slot的
這是啟動Task的其中這個tdd就包含了一些任務的信息上下游inputGate,resultPartition等 具體job啟動的時候詳細講一下
這個方法也是比較重要的,可以看到這是一個觸發checkPoint的RPC,這裡可能會有疑問為什麼Chenkpoint這個RPC會在TaskManager端
可以先簡單的看下具體實現
看到這裡大致就知道了,其實這個RPC是留給Coordinator調用的,會觸發生成Barrier的邏輯(也就是經常說的,coordinator會在source插入barriers用於分散式快照對齊)隨緣更新到checkpoint的時候在細說吧
這裡TaskManager就差不多啟動起來了,當然TaskManager還有很多服務像什麼HA,Heartbeat,BlobCache也會起起來,這裡就不全部寫出了