flink HighAvailabilityServices源码解析

本文深入解析Flink的HighAvailabilityServices,包括其作用、使用者、创建过程及典型实现ZooKeeperHaServices。HighAvailabilityServices提供Leader选举与获取服务,支持Checkpoint恢复,保存JobGraph和大文件的高可用存储。详细介绍了ZooKeeperHaServices的创建,如CuratorFramework配置、LeaderElectionService与LeaderRetrievalService的工作原理。
摘要由CSDN通过智能技术生成

写在前面:源码查看入口 

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值