LocalFlinkMiniCluster 叢集的actor 模型
- 相關的主要類圖如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLjNTY3MmZ4EzM4kzYjNjMjlDZ2czN1ATOihzYjNjN3MzLc12bj5yYulWLuVXepxWYuIWdw1ycz9mL19Ga6dmbhhWLuNmLn1WatITY0F2Lc9CX6MHc0RHaiojIsJye.png)
- AkkaRpcActor持有一個rpcEndpoint成員,接收到消息後進行基礎解析後調用rpcEndpoint的的對應方法來進行處理。
- 其中RpcGateway及RpcEndPoint的類圖
LocalFlinkMiniCluster啟動DataStream任務的流程
- 支援的消息類型
- 其中主要使用RpcInvocation基于反射調用RPCEndpoint的對應函數
- FencedMessage 将message進行封裝成payload,通過fencingToken進行校驗,保證請求的合法性
LocalFlinkMiniCluster啟動DataStream任務的流程
LocalFlinkMiniCluster叢集的角色
- ResouceManager
- 負責容器的配置設定
- 使用FencedAkkaRpcActor實作,其rpcEndpoint為 org.apache.flink.runtime.resourcemanager.ResourceManager
- JobMaster
- 負責任務執行計劃的排程和執行,
- 使用FencedAkkaRpcActor實作,其rpcEndpoint為 org.apache.flink.runtime.jobmaster.JobMaster
- JobMaster持有一個SlotPool的Actor,用來暫存TaskExecutor提供給JobMaster并被接受的slot。JobMaster的Scheduler元件從這個SlotPool中擷取資源以排程job的task
- Dispatcher
-
- 主要職責是接收從Client端送出過來的job并生成一個JobMaster去負責這個job在叢集資料總管上執行。
- 不是所有部署方式都需要用到dispatcher,比如yarn-cluster 的部署方式可能就不需要
- 使用FencedAkkaRpcActor實作,其rpcEndpoint為 org.apache.flink.runtime.dispatcher.StandaloneDispatcher
- 主要職責是接收從Client端送出過來的job并生成一個JobMaster去負責這個job在叢集資料總管上執行。
- TaskExecutor
- TaskExecutor會與ResouceManager和 JobMaster兩者進行通信。
- 會向ResourceManager報告自身的可用資源;并維護本身slot的狀态
- 根據slot的配置設定結果,接收JobMaster的指令在對應的slot上執行指定的task。
- TaskExecutor還需要向以上兩者定時上報心跳資訊。
- 使用AkkaRpcActor實作,其rpcEndpoint為org.apache.flink.runtime.taskexecutor.TaskExecutor
- TaskExecutor會與ResouceManager和 JobMaster兩者進行通信。
啟動DataStream任務的主體流程
參考資料