写在前面:源码查看入口
runtime ---> Entrypoint
不同模式对应不同入口,比如 :
StandaloneSessionClusterEntrypoint,ClusterEntrypoint
在Entrypoint中初始化 haservier。之后传递到 -->
Dispatcher ----> jobmaster -----> jobmanager
概述
Flink内部有一些服务是JobMaster和TaskExecutor共用的。如HighAvailabilityServices, RpcService, ActorSystem(MetricQueryService), HeartbeatServices, MetricRegistryImpl, BlobCacheService.
HighAvailabilityServices 的作用
- 提供 Leader 获取服务(ResourceManager, Dispatcher, JobManager, WebMonitor)
- 提供 Leader 选举服务(同上)
- 提供Checkpoint恢复工厂类(获取已完成的Checkpoint的元信息,以及Checkpoint计数器)
- 提供SubmittedJobGraphStore,用来保存和恢复JobGraph
- 提供大文件(Blob)的高可用存储
- 提供(RunningJobsRegistry),任务状态信息的保存与获取
HighAvailabilityServices 的使用者
- ClusterEntrypoint
- TaskManagerRunner
- ClusterClient
HighAvailabilityServices 的创建
-
HighAvailabilityServices 的创建是通过HighAvailabilityServicesUtils这个工具类,这个工具类提供了两个重要的静态方法来生成HighAvailabilityServices 。
-
第一个是 createAvailableOrEmbeddedServices(Configuration config, Executor executor),主要用于创建MiniCluster,服务于测试和本地运行。
-
第二个是 createHighAvailabilityServices(Configuration configuration, Executor executor, AddressResolution addressResolution),相比于第一个方法,它的参数还需要AddressResolution 。
/** * Enum specifying whether address resolution should be tried or not when creating the * {@link HighAvailabilityServices}. */ public enum AddressResolution { TRY_ADDRESS_RESOLUTION, NO_ADDRESS_RESOLUTION }
- TRY_ADDRESS_RESOLUTION和NO_ADDRESS_RESOLUTION,分别代表是否需要解析地址。用于在非HA环境下的直接解析地址,如果hostname不存在则快速失败。在ClusterEntrypoint中由于是本地,不需要解析,而在TaskManagerRunner与ClusterClient中使用了TRY_ADDRESS_RESOLUTION,因为一个是负责执行具体任务,另一个则是用户的客户端。
- 这个方法首先获取高可用模式(HighAvailabilityMode),分别是无高可用,基于Zookeeper的高可用,以及自己定制的高可用模式。
public enum HighAvailabilityMode { NONE(false), ZOOKEEPER(true), FACTORY_CLASS(true); }
- 其中None模式JobManager地址是固定的,所以直接从Configuration中获取地址并生成一个StandaloneHaServices。
- Zookeeper模式会先创建BlobStorService,就是一个高可用的大文件持久化服务,这个服务将文件保存在high-availability.storageDir配置的位置,并在Zookeeper上保存元信息。
case ZOOKEEPER: BlobStoreService blobStoreService = BlobUtils.createBlobStoreFromConfig(configuration); return new ZooKeeperHaServices( ZooKeeperUtils.startCuratorFramework(configuration), executor, configuration, blobStoreService);
- Custom模式需要用户自己实现HighAvailabilityServicesFactory
-
LeaderElectionService & LeaderRetrievalService
- LeaderElectionService和LeaderRet