我们来看看当一个应用提交执行时,Flink 的各个组件是如何交互协作的:
上图是从一个较为高层级的视角,来看应用中各组件的交互协作。如果部署的集群环境 不同(例如 YARN,Mesos,Kubernetes,standalone 等),其中一些步骤可以被省略,或是 有些组件会运行在同一个 JVM 进程中。 具体地,如果我们将 Flink 集群部署到 YARN 上,那么就会有如下的提交流程:
1.Flink 任 务 提 交 后 , Client 向 HDFS 上 传 Flink 的 Jar 包 和 配 置 , 之 后 向 Yarn ResourceManager 提 交 任 务 ,
2.ResourceManager 分 配 Container 资 源 并 通 知 对 应 的 NodeManager 启动 ApplicationMaster,
3.ApplicationMaster 启动后加载 Flink 的 Jar 包 和配置构建环境,然后启动 JobManager,
4.之后 ApplicationMaster 向 ResourceManager 申 请 资 源 启 动 TaskManager ,
5. ResourceManager 分 配 Container 资 源 后 ,
6. 由 ApplicationMaster 通 知 资 源 所 在 节 点 的 NodeManager 启 动 TaskManager , NodeManager 加载 Flink 的 Jar 包和配 置构建环境并启动 TaskManager,
7. TaskManager 启动后向 JobManager 发送心跳包,并等待 JobManager 向其分配任务。