Flink源码解析(十二)——Flink On Yarn JobManager启动过程ResourceManager启动解析

一、JobManager启动过程ResourceManager启动解析

在上一篇随笔中介绍了Zookeeper Curator框架Leader选举过程和ClusterEntrypoint 3大核心组件基本功能及WebmonitorEndpoint的启动过程。本篇随笔介绍核心组件ResourceManager的启动过程。

1、ResourceManagerService resourceManagerService = ResourceManagerServiceImpl.create(...),其中类继承信息如下:ResourceManagerServiceImpl <- {ResourceManagerService, LeaderContender},可知ResourceManagerServiceImpl是一个Leader选举候选者。

(1)、resourceManagerService创建完成后会调用start()方法启动Leader选举过程,选举过程和上篇随笔WebmonitorEndpoint的Leader选举过程一样。

现在简述如下:

ResourceManagerServiceImpl.start()
  DefaultLeaderElection.startLeaderElection(...)
  DefaultLeaderElectionService.register(...)
  DefaultLeaderElectionService.createLeaderElectionDriver(...)
  ZooKeeperLeaderElectionDriverFactory.create(...){
    new ZooKeeperLeaderElectionDriver(curatorFramework, leaderElectionListener);
  }
  ZooKeeperLeaderElectionDriver.isLeader()
  DefaultLeaderElectionService.onGrantLeadership(...)
  DefaultLeaderElectionService.onGrantLeadershipInternal(...)
  DefaultLeaderElectionService.notifyLeaderContenderOfLeadership(...)
  ResourceManagerServiceImpl.grantLeadership(...)
  ResourceManagerServiceImpl.startNewLeaderResourceManager(...)

可知Leader选举完会回调到ResourceManagerServiceImpl.startNewLeaderResourceManager(...)方法中

1)、resourceManagerFactory.createResourceManager(...)方法最终会创建一个ActiveResourceManager实例,类继承关系如下:

ActiveResourceManager <- ResourceManager <- {
  FencedRpcEndpoint <- RpcEndpoint <- RpcGateway
  FencedRpcGateway <- RpcGateway

}

2)、startResourceManagerIfIsLeader(...)方法最后会触发resourceManager.start()方法的调用,此方法里会启动resourcemanager所需要的一系列基础组件,下面会详细讲解。

3)、leaderElection.confirmLeadership(...)方法作用是将Leader信息写入Zookeeper路径中。

(2)、resourceManager.start()方法详解,由ActiveResourceManager的继承关系可知,ResourceManager是RpcEndpoint的子类。RpcEndpoint在调用start()方法时会作用到成员变量rpcServer.start()的方法上,由Flink akka RPC框架可知,rpcServer.start()方法最后会回调到RpcEndpoint的onStart()方法上。

(3)、onStart()方法,由下图可知该方法主要是启动2个心跳服务、1个slotmanager服务。

(4)、由startHeartbeatServices()方法可知主要是启动1个ResourceManager到TaskManager的心跳服务、1个ResourceManager到JobManager的心跳服务。在创建心跳服务实例时主要是新建HeartbeatManagerSenderImpl实例对象,该类继承至Runnable接口,构造函数中会添加到定时调度线程池中发起定时的心跳动作。

(5)、slotManager.start(...)方法执行时,主要是开启2个定时服务。一个是空闲TaskManager的回收、一个是slot请求超时的处理。大家可以自行查看。

二、ResourceManager启动总结

以上可知ResourceManager的启动过程不太复杂,根据akka rpc框架原理,主要是启动了2个心跳服务、2个定时服务以及ResourceManager候选者竞选Leader过程并将自己的信息写入Zookeeper中。下一篇随笔解析Dispatcher的启动过程。

posted @ 2024-01-14 16:04  有一个娃  阅读(41)  评论(0编辑  收藏  举报