Flink作业任务部署解读

简介: 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+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
消息中间件 分布式计算 大数据
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
844 0
|
SQL 运维 Java
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
本文介绍了对Flink实时计算编译任务的Koupleless架构改造。为解决进程模型带来的响应慢、资源消耗大等问题,团队将进程模型改为线程模型,并借助Koupleless的类加载隔离能力实现版本和包的隔离。通过动态装配Plugin及其Classpath,以及Biz运行时仅对依赖Plugin可见的设计,大幅优化了编译任务的性能。结果表明,新架构使编译耗时降低50%,吞吐量提升5倍以上。
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
|
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
1261 4
|
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容器编排
646 3
|
消息中间件 分布式计算 大数据
大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
1692 0
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
730 0
|
资源调度 Java Scala
实时计算 Flink版产品使用问题之如何实现ZooKeeper抖动导致任务失败时,能从最近的检查点重新启动任务
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何从savepoint重新启动作业
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
1204 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄

热门文章

最新文章