Flink集群入口启动
前言
1.本文讨论集群入口ClusterEntryPoint设计,内部集群各模块以及其内部需要不同实现的DispatcherResourceManagerComponent模块组成。只是列出了思维导图,并没用针对某个实现去做具体分析。2.Client端脚本提交,client初始化(包括session,per-job模式下的graph构建)等也不在讨论范围。
ClusterEntryPoint
ClusterEntryPoint是所有集群的入口基类,其各个实现涵盖了Driver端的入口main函数。其UML类图如下:

根据实现可以看出,Flink提供了三种不同的任务提交方式:
- Sessoin(会话、多任务共享模式)
- Per-job(独立集群模式)
- Application(Main函数初始化在Driver端,上面两个用户程序main函数是在client端执行的)
ClusterEntryPoint作为集群的入口,初始化了各个通用组件,DispatcherResourceManagerComponentFactory的生成由各个子类去实现。通用组件如下:
- RpcService:负责所有RPC通信
- ioExecutor:负责集群IO执行的线程池
- haService: flink中ha服务
- blobServer: 临时文件和blob
- heartBeatService:心跳服务
- metricRegistry、ProcessMetricGroup: 负责集群各指标监控
那么什么是由各个实现类去实现的呢:
- DispatcherResourceManagerComponentFactory的构建
不同的任务提交方式决定了不同的资源分配,任务分发。
DispatcherResourceManagerComponent包含了Dispatcher,resourceManager,webMoniter构建等。内部初始化资源分配,任务分发,管理端模块,是一个很重要的模块。 - ArchivedExecutionGraphStore
这是一个executionGraph存储的类,不同模式executionGraph构建时机,存储地方都会不同。此生成函数实现大多在Job,Session,Application层就可以确定。
DispatcherResourceManagerComponent
DispatcherResourceManagerComponent需要各子类实现其构建工厂。那么我们看看其内部含有什么:
- DispatcherRunnerFactory
DispatcherRunner也是flink三个HA中的一个,其成为leader后会启动启动Dispatcher,用于管理任务(提交,取消,任务监控等),当然对于单个Job还有jobManagerRuner(负责启动单个任务),JobManager等。这个很重要,另说。 ResourceManagerFactory
RresourManager根据不同运行时环境为不同实现。其内部大致通用组成有:- 注册的任务,资源保存。
- 正在注册的任务executor。
- 已经注册的任务executor。
- 负责资源槽管理的slotManager
- 跟踪和释放分区的组件
- 资源指标监控
任务执行,任务管理端的心跳管理。
其在内部函数上实现了对外的slot report、申请,任务管理端、执行端注册、并与之的监控等。
RestEndpointFactory
负责flink的web管理端。
