1.启动的调用链
StandaloneSessionClusterEntrypoint.main()-->
ClusterEntrypoint.runClusterEntrypoint()-->
ClusterEntrypoint.startCluster()-->
ClusterEntrypoint.runCluster(configuration)-->
ClusterEntrypoint.initializeServices(configuration)-->
clusterComponent = dispatcherResourceManagerComponentFactory.create(...)
2.initializeServices函数创建多个服务
创建commonRpcService,公用RpcServer
创建ioExecutor线程池
创建haServices高可用服务,注意,haServices包含各种服务,包括各RpcEndpoint的URL,JobManager, ResourceManager, Dispatcher, 集群选举服务,运行job注册,检查点恢复Factory等等。
创建并启动blobServer,接收request,存储request,并发处理request。
创建heartbeatServices心跳服务,它可以在运行是创建HearbeatManagerImpl和HeartbeatManagerSenderImpl。
创建metricRegistry,性能度量注册。
创建metricQueryServiceRpcService,这是一个RPC服务,性能度量结果以RPC方式发送到远程主机以便进行统计。
创建archivedExecutionGraphStore,这个是由父类SessionClusterEntrypoint的createSerializableExecutionGraphStore函数创建的,它把 计算图 存储到磁盘和内存 做备用。
3.创建clusterComponent
3.1 createDispatcherResourceManagerComponentFactory函数在ClusterEntrypoint是一个抽象函数,跟进下去,能看到它的具体实现是在StandaloneSessionClusterEntrypoint类。
3.2 StandaloneSessionClusterEntrypoint.createDispatcherResourceManagerComponentFactory函数,返回的是SessionDispatcherResourceManagerComponentFactory。
3.3 SessionDispatcherResourceManagerComponentFactory的create函数,是在其父类AbstractDispatcherResourceManagerComponentFactory实现的。
3.4 AbstractDispatcherResourceManagerComponentFactory.create函数,做了如下事情:
创建集群Leader信息存储服务
创建和启动webMonitorEndpoint,这个是负责Web Rest调用的服务。
创建resourceManager,资源管理器。
创建dispatcher。
最后,实例化一个DispatcherResourceManagerComponent返回。
至此,启动完成。