Flink作业任务部署解读

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink作业任务部署解读

1. 引言

官方部署介绍:https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/deployment/overview/

Flink任务支持许多不同场景的部署,如部署作业任务至Standalone独立集群、Yarn或者K8S,部署流程如下:

根据部署流程图,可以知道有如下组件:Flink Client、JobManager、TaskManager等。

其流程简要描述:

  • 1. 使用Flink Client客户端提交任务至JobManager(提交方式有很多种,如CMD、REST、SQL Client等);
  • 2. JobManager是Flink的工作中心,主要分配工作给TaskManager(JobManager的提交方式有多种,如Application、Per-Job、Session);
  • 3. TaskManager是Flink任务的执行者;
  • 4. 其余组件都是可选的,如HA ServiceProvider主要做JobManager的故障转移、Resource Provider 即资源提供框架进行部署Kubernetes或YARN等。

2. Flink Client (任务提交客户端)

Flink Client:是Flink作业任务提交客户端,它主要将批处理或流处理应用程序编译为数据流图(JobGraph),然后提交给JobManager

提交方式分为如下几种(点击即可查看详情):

3. JobManager (任务协调者)

JobManager是Flink的中心工作协调组件。它根据作业提交模式,并针对不同的资源管理程序(Resource Provider),实现不同的高可用性、资源分配行为

JobManager 作业任务提交模式有如下:

  • Application Mode
  • Per-Job Mode
  • Session Mode

3.1 Application Mode

Application Mode为每个提交的应用程序创建一个集群,注意应用程序的main()方法在JobManager上执行,这个过程包括本地下载应用程序的依赖项,执行main()来提取Flink运行时可以理解的应用程序的表示(即JobGraph),并将依赖项和JobGraph发送到集群

3.2 Per-Job Mode

在Per-Job模式下,集群管理器框架(例如YARN或Kubernetes)用于为每个提交的Job启动一个 Flink 集群。

Job完成后,集群将关闭,所有残留的资源(例如文件)也将被清除。此模式可以更好地隔离资源,因为行为异常的Job不会影响任何其他Job。另外,由于每个应用程序都有其自己的JobManager,因此它将记录的负载分散到多个实体中。

  • 特点:每次递交作业都需要申请一次资源
  • 优点:作业运行完成,资源会立刻被释放,不会一直占用系统资源
  • 缺点:每次递交作业都需要申请资源,会影响执行效率,因为申请资源需要消耗时间
  • 应用场景:适合作业比较少的场景、大作业的场景

3.3 Session Mode

Session 模式假定已经存在一个集群,并任何的提交的应用都在该集群里执行。

因此会导致资源的竞争,该模式的优势是你无需为每一个提交的任务花费精力去分解集群。但是,如果Job异常或是TaskManager 宕掉,那么该TaskManager运行的其他Job都会失败。除了影响到任务,也意味着潜在需要更多的恢复操作,重启所有的Job,会并发访问文件系统,会导致该文件系统对其他服务不可用。此外,单集群运行多个Job,意味着JobManager更大的负载。这种模式适合启动延迟非常重要的短期作业。

  • 特点:需要事先申请资源,启动JobManager和TaskManger
  • 优点:不需要每次递交作业申请资源,而是使用已经申请好的资源,从而提高执行效率
  • 缺点:作业执行完成以后,资源不会被释放,因此一直会占用系统资源
    应用场景:适合作业递交比较频繁的场景,小作业比较多的场景

3.4 小结

以下是根据个人理解的三种模式:

  • Application 模式提交的应用程序已经包含了Flink的环境(即Flink集群环境),应用程序的main方法在JobManager上执行,过程包括本地下载应用程序的依赖项,main来提取Flink运行时可以理解的应用程序的表示(即JobGraph),并将依赖项和JobGraph发送到集群。
  • Per-Job模式需要为每个提交的作业先创建好集群,它提供了更好的隔离保证,因为资源不会在作业之间共享,在这种情况下,集群的生命周期绑定到作业的生命周期。
  • Session模式:先创建好集群,集群的生命周期独立于集群上运行的任何作业的生命周期,所有作业共享统一集群资源

4. TaskManager(任务执行者)

TaskManager 是实际执行Flink作业的服务,本文不再详述。

5. Resource Provider(资源管理者)

前面讲到JobManager根据作业提交的情况,并根据不同的资源管理者来实现高可用性和资源分配。

资源管理程序有:

  • Standalone
  • Kubernetes
  • YARN

5.1 Standalone(独立集群)

详情参考:https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/deployment/resource-providers/standalone/overview

5.2 Kubernetes(k8s集群)

详情参考:https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/deployment/resource-providers/native_kubernetes/

工作原理如下:

  1. 使用 Kubectl 或者 K8s 的 Dashboard 提交请求到 K8s Master;
  2. K8s Master 将创建 Flink Master Deployment、TaskManager Deployment、ConfigMap、SVC 的请求分发给 Slave 去创建这四个角色,创建完成后 Flink Master、TaskManager 启动;
  3. TaskManager 注册到 JobManager。在非 HA 的情况下,是通过内部 Service 注册到 JobManager,至此,Flink 的 Sesion Cluster 已经创建起来。此时就可以提交任务了;
  4. 在 Flink Cluster 上提交 Flink run 的命令,通过指定 Flink Master 的地址,将相应任务提交上来,用户的 Jar 和 JobGrapth 会在 Flink Client 生成,通过 SVC 传给 Dispatcher;
  5. Dispatcher 会发现有一个新的 Job 提交上来,这时会起一个新的 JobMaster,去运行这个 Job;
  6. JobMaster 会向 ResourceManager 申请资源,因为 Standalone 方式并不具备主动申请资源的能力,所以这个时候会直接返回,而且我们已经提前把 TaskManager 起好,并且已经注册回来;
  7. 这时 JobMaster 会把 Task 部署到相应的 TaskManager 上,整个任务运行的过程就完成。

5.3 YARN(yarn集群)

详情参考:https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/deployment/resource-providers/yarn/

工作原理如下:

  1. Client上传jar包和配置文件到HDFS集群上;
  2. Client向Yarn ResourceManager提交任务并申请资源;
  3. ResourceManager分配Container资源并启动AppMaster;
  4. 然后AppMaster加载Flink的Jar包和配置构建环境,启动JobManager,JobManager和ApplicationMaster运行在同一个container上。
  5. 一旦它们被成功启动,AppMaster就知道JobManager的地址(AppMaster它自己所在的机器),它就会为TaskManager生成一个新的Flink配置文件(他们就可以连接到JobManager),这个配置文件也被上传到HDFS上;
  6. 此外,AppMaster容器也提供了Flink的web服务接口,YARN所分配的所有端口都是临时端口,这允许用户并行执行多个Flink;
  7. ApplicationMaster向ResourceManager申请工作资源,NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager;
  8. TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。

6. 文末总结

从本文我们知道了Flink作业任务部署有几种模式,分别为:

  • Application 模式
  • Per-Job 模式
  • Session模式

无论何种模式,都是提交到JobManager的,JobManager会把作业分发到不同的TaskManager,TaskManager为实际的工作者

对于JobManager及TaskManager,又可以部署到不同的资源管理器中,如:

  • Standlone 独立集群
  • Yarn 资源管理器
  • K8S 集群(本质也是资源管理器)

好了,本文就讲到这里,希望能帮助到大家,谢谢大家的阅读,本文完!

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
2月前
|
消息中间件 分布式计算 大数据
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
115 0
|
2月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
116 4
|
2月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
76 3
|
2月前
|
消息中间件 分布式计算 大数据
大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
105 0
|
2月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
102 0
|
4月前
|
资源调度 Java Scala
实时计算 Flink版产品使用问题之如何实现ZooKeeper抖动导致任务失败时,能从最近的检查点重新启动任务
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何从savepoint重新启动作业
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
机器学习/深度学习 人工智能 运维
美团 Flink 大作业部署问题之Flink在生态技术演进上有什么主要方向
美团 Flink 大作业部署问题之Flink在生态技术演进上有什么主要方向
|
Java 对象存储 流计算
如何迁移 Flink 任务到实时计算
本文由阿里巴巴技术专家景丽宁(砚田)分享,主要介绍如何迁移Flink任务到实时计算 Flink 中来。
如何迁移 Flink 任务到实时计算
|
3月前
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。