Flink集群入口启动

前言

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

ClusterEntryPoint

  1. ClusterEntryPoint是所有集群的入口基类,其各个实现涵盖了Driver端的入口main函数。其UML类图如下:

FlinkEntryPointUML.png

根据实现可以看出,Flink提供了三种不同的任务提交方式:

  1. Sessoin(会话、多任务共享模式)
  2. Per-job(独立集群模式)
  3. 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

  1. DispatcherResourceManagerComponent需要各子类实现其构建工厂。那么我们看看其内部含有什么:
  • DispatcherRunnerFactory
    DispatcherRunner也是flink三个HA中的一个,其成为leader后会启动启动Dispatcher,用于管理任务(提交,取消,任务监控等),当然对于单个Job还有jobManagerRuner(负责启动单个任务),JobManager等。这个很重要,另说。
  • ResourceManagerFactory
    RresourManager根据不同运行时环境为不同实现。其内部大致通用组成有:

    • 注册的任务,资源保存。
    • 正在注册的任务executor。
    • 已经注册的任务executor。
    • 负责资源槽管理的slotManager
    • 跟踪和释放分区的组件
    • 资源指标监控
    • 任务执行,任务管理端的心跳管理。

      其在内部函数上实现了对外的slot report、申请,任务管理端、执行端注册、并与之的监控等。

  • RestEndpointFactory
    负责flink的web管理端。