一、概述

Flink 采用 Master-Slave 架构,其中 JobManager 作为集群 Master 节点,主要负责任务协调和资源分配,TaskManager 作为 slave 节点,用于执行任务。

 flink cluster

二、集群启动脚本

Flink 集群的启动脚本在 flink-dist 子项目中,位于 flink-bin 下的 bin 目录,启动脚本为: startcluster.sh

该脚本会首先调用 config.sh 分别从 conf/mastersconf/workers 配置文件中获取 masters 和 workers 信息,然后分别:

  1. 通过 jobmanager.sh 启动 JobManager

  2. 通过 taskmanager.sh 启动 TaskManager

他们的内部,都通过 flink-daemon.sh 脚本来启动 JVM 进程,分析 flink-daemon.sh 脚本发现:

  1. JobManager 的启动代号: standalonesession,启动主类 StandaloneSessionClusterEntrypoint

    1
    2
    3
    (standalonesession)
    CLASS_TO_RUN=org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint
    ;;
  2. TaskManager 启动主类 TaskManagerRunner

    1
    2
    3
    (taskexecutor)
    CLASS_TO_RUN=org.apache.flink.runtime.taskexecutor.TaskManagerRunner
    ;;

三、集群启动

3.1. JobManager 启动

JobManager 相当于集群的 Master 节点,整个集群有且只有一个活跃的 JobManager(在高可用场景下,可能会出现多个 JobManager,但是只有一个是正在活跃的领导 Leader 节点,其他都是 Standby 节点)。

3.2. TaskManager 启动

TaskManager 相当于整个集群的 Slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请和管理。每一个 TaskManager 都包含了一定数量的任务槽(slots)。slot 是资源调度的最小单位,slot 的数量限制了 TaskManager 能够并行处理的任务数量。