ResourceManager(ZK模式)的高可用启动流程
ResourceManager
启动流程在DefaultDispatcherResourceManagerComponentFactory#create
中
public DispatcherResourceManagerComponent create(
Configuration configuration,
ResourceID resourceId,
Executor ioExecutor,
RpcService rpcService,
HighAvailabilityServices highAvailabilityServices,
BlobServer blobServer,
HeartbeatServices heartbeatServices,
DelegationTokenManager delegationTokenManager,
MetricRegistry metricRegistry,
ExecutionGraphInfoStore executionGraphInfoStore,
MetricQueryServiceRetriever metricQueryServiceRetriever,
Collection<FailureEnricher> failureEnrichers,
FatalErrorHandler fatalErrorHandler)
throws Exception {
//resourcemanager的选举服务
LeaderRetrievalService resourceManagerRetrievalService = null;
ResourceManagerService resourceManagerService = null;
try {
//resourceManager leader 获取服务
resourceManagerRetrievalService =
highAvailabilityServices.getResourceManagerLeaderRetriever();
//LeaderGatewayRetriever实现了LeaderRetrievalListener接口
final LeaderGatewayRetriever<ResourceManagerGateway> resourceManagerGatewayRetriever =
new RpcGatewayRetriever<>(
rpcService,
ResourceManagerGateway.class,
ResourceManagerId::fromUuid,
new ExponentialBackoffRetryStrategy(
12, Duration.ofMillis(10), Duration.ofMillis(50)));
resourceManagerService =
ResourceManagerServiceImpl.create(
resourceManagerFactory,
configuration,
resourceId,
rpcService,
highAvailabilityServices,
heartbeatServices,
delegationTokenManager,
fatalErrorHandler,
new ClusterInformation(hostname, blobServer.getPort()),
webMonitorEndpoint.getRestBaseUrl(),
metricRegistry,
hostname,
ioExecutor);
//启动resourceManagerService start方法会调用具体的选举方法
resourceManagerService.start();
//启动etrievalService服务的start方法,
resourceManagerRetrievalService.start(resourceManagerGatewayRetriever);
return new DispatcherResourceManagerComponent(
dispatcherRunner,