Fink 集群启动时组件会执行 initializeServices() 方法初始化一些基础服务,比如说 JobManager 启动时会初始化一些 RPC 通信服务、高可用服务以及监控服务等。

  1. RPC 通信服务

    Flink 集群内部通信框架的最底层依赖于 Akka,定义了不同类型的消息,并且设计了通用的 RPC 通信组件,Flink 的所有提供 RPC 请求的集群组件(如 JobMaster、 TaskManager、 ResourceManager、 Dispatcher 等)都使用了这些 RPC 通信基础组件來提供对外的 RPC 接口。
    JobManager RPC 服务如图所示:

    Jobmanager rpcservice
  2. 高可用服务

    向集群组件提供高可用支持,集群中的组件都会通过 haService 创建高可用服务。

  3. 监控服务

    集群监控指标收集

  4. 心跳服务

    公共心跳服务,在 Flink 集群中集群组件的心跳服务是在公共心跳服务的基础之上创建。

    HeartbeatServices 是心跳服务的提供者,谁需要心跳服务,通过 HeartbeatServices 去提供一个实例 HeartBeatImpl, 用来完成心跳

  5. I/O 线程池
    用于集群组件的 I/O 操作,如本地文件数据读取和输出等

  6. Blob 服务

    用来管理二进制文件(例如上传 Job 的 jar 包以及其依赖包,或者 TaskManager 上传的 log 文件等

  7. 存储 ExecutionGraph 的 Store 服务

    创建 ArchivedExecutionGraphStore 服务,用于压缩并存储集群中的 ExecutionGraph 默认有两种实现