Flink 集群部署模式

文章目录

  • 前言
  • 一、会话模式(Session Mode)
  • 二、单作业模式(Per-Job Mode)
  • 三、应用模式(Application Mode)


前言

Flink支持多种集群部署模式,以满足不同场景和需求。以下是Flink的主要集群部署模式:

  1. 会话模式(Session Mode)

    • 在会话模式下,用户首先启动一个长期运行的Flink集群,然后在这个会话中提交多个作业。
    • 集群资源在启动时就已经确定,提交的作业会竞争集群中的资源,直到作业运行完毕释放资源。
    • 会话模式适合执行大量规模小、执行时间短的作业。
    • 由于集群资源是共享的,因此可能存在资源争用的问题。
  2. 单作业模式(Per-Job Mode)

    • 在单作业模式下,每个作业都会启动一个独立的Flink集群,作业完成后集群也会关闭。
    • 这种模式为每个作业提供了资源隔离,避免了资源争用的问题。
    • 由于每个作业都需要启动和关闭集群,因此在处理大量作业时可能会产生额外的开销。
    • 单作业模式通常与第三方资源调度器(如YARN、Kubernetes等)结合使用,以便更有效地管理集群资源。
  3. 应用模式(Application Mode)

    • 应用模式与单作业模式类似,也是为每个作业启动一个独立的Flink集群。
    • 与单作业模式不同的是,在应用模式下,作业的main方法直接在JobManager上执行,而不是在客户端执行。
    • 这种模式简化了作业的提交过程,并减少了客户端与JobManager之间的通信开销。
    • 应用模式同样需要依赖第三方资源调度器来管理集群资源。

在选择Flink的集群部署模式时,需要根据实际的应用场景和需求进行权衡。例如,对于需要频繁提交大量小作业的场景,会话模式可能是一个合适的选择;而对于需要严格资源隔离和稳定性保障的场景,单作业模式或应用模式可能更为合适。同时,还需要考虑与现有资源调度器的集成和兼容性。


一、会话模式(Session Mode)

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
在 Apache Flink 的会话模式(Session mode)中,假设已经存在一个预先配置好的运行中的集群,该集群提供必要的资源来执行提交的应用程序。在这种模式下,多个应用程序共享同一个集群的资源,这意味着它们会竞争 CPU、内存和其他资源。

以下是会话模式的优势和劣势,供您在决策时考虑:

优势:

  1. 资源高效性: 对于每个提交的作业都启动一个完整的集群会消耗大量资源。在会话模式下,您避免了这种开销,因为可以重复使用已运行集群的资源。

  2. 简化管理: 有一个长期运行的集群意味着您不需要为每个作业频繁地启动和关闭集群。这简化了集群管理,减少了操作复杂性。

劣势:

  1. 资源竞争: 由于所有作业共享同一个集群的资源,它们会争夺 CPU、内存和网络带宽。这可能导致性能下降,如果某个作业消耗了不成比例的资源。

  2. 故障传播: 如果一个作业行为异常或导致 TaskManager 失败,它可能会影响在同一 TaskManager 上运行的其他作业。这可能导致故障级联和大规模的恢复过程,这个过程可能非常消耗资源且耗时。

  3. JobManager 负载增加: JobManager 负责管理和协调集群中运行的所有作业。多个作业同时运行时,JobManager 会面临增加的负载,这可能影响其性能和可伸缩性。

  4. 隔离性有限: 会话模式提供的作业之间的隔离性有限。一个作业的问题可能会潜在地影响在相同集群中运行的其他作业。

在考虑会话模式时,重要的是要评估您的具体用例和需求。如果您有一组稳定的作业,它们不需要严格的资源隔离,并且您希望最大化资源利用率,那么会话模式可能是一个不错的选择。然而,如果您需要更好的隔离性、容错性或对资源分配的更精细控制,您可能想考虑其他部署模式,如单作业模式(Per-Job)或应用模式(Application mode)。

此外,值得注意的是,Flink 提供了配置选项来减轻会话模式的一些劣势。例如,您可以配置资源配额或根据作业的重要性设置优先级,以确保公平的资源分配。您还可以使用外部监控和告警工具来快速检测和响应故障。

二、单作业模式(Per-Job Mode)

在这里插入图片描述
为了提供更好的资源隔离保证,单作业模式(Per-Job mode)使用可用的资源提供者框架(如YARN、Kubernetes)为每个提交的作业启动一个集群。这个集群仅对该作业可用。作业完成后,集群会被销毁,任何剩余的资源(如文件等)也会被清理。这提供了更好的资源隔离,因为行为异常的作业只能导致其自己的 TaskManager 崩溃。此外,由于每个作业都有一个 JobManager,因此它将记录工作的负载分散到了多个 JobManager 上。出于这些原因,单作业资源分配模型是许多生产环境首选的模式。

三、应用模式(Application Mode)

在这里插入图片描述
应用模式(Application Mode)#

在所有的其他模式中,应用程序的 main() 方法都是在客户端执行的。这个过程包括在本地下载应用程序的依赖项,执行 main() 来提取 Flink 运行时可以理解的应用程序表示(即 JobGraph),并将依赖项和 JobGraph 发送到集群。这使得客户端成为了一个大量消耗资源的实体,因为它可能需要大量的网络带宽来下载依赖项和向集群发送二进制文件,以及 CPU 周期来执行 main()。当客户端在多用户之间共享时,这个问题可能会更加明显。

基于这一观察,应用模式为每个提交的应用程序创建一个集群,但这次,应用程序的 main() 方法是在 JobManager 上执行的。为每个应用程序创建一个集群可以看作是创建一个会话集群,该集群仅由特定应用程序的作业共享,并在应用程序完成后销毁。通过这种架构,应用模式提供了与单作业模式相同的资源隔离和负载均衡保证,但粒度是整个应用程序。在 JobManager 上执行 main() 方法不仅节省了所需的 CPU 周期,还节省了本地下载依赖项所需的带宽。此外,由于每个应用程序都有一个 JobManager,它还允许在集群中更均衡地分配下载应用程序依赖项的网络负载。

在应用模式中,main() 是在集群上执行的,而不是在客户端上,如其他模式那样。这可能对您的代码产生影响,例如,您使用 registerCachedFile() 在环境中注册的任何路径都必须可由您的应用程序的 JobManager 访问。

与单作业模式相比,应用模式允许提交由多个作业组成的应用程序。作业的执行顺序不受部署模式的影响,而是由用来启动作业的调用方式决定。使用阻塞式的 execute() 方法会建立一个顺序,并导致“下一个”作业的执行被推迟,直到“当前”作业完成。而使用非阻塞式的 executeAsync() 方法会导致“下一个”作业在“当前”作业完成之前就开始执行。

应用模式支持多 execute() 应用程序,但在这种情况下不支持高可用性(High-Availability)。应用模式中的高可用性仅支持单 execute() 应用程序。

此外,在应用模式中,如果多个正在运行的作业中的任何一个(例如,使用 executeAsync() 提交的)被取消,所有作业都将停止,并且 JobManager 将关闭。正常的作业完成(由源关闭引起)是被支持的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot多模块下swaggar界面出现异常(Knife4j文档请求异常)或者界面不报错但是没有显示任何信息

继上一篇博文,我们解决了多模块下扫描不到子模块的原因,建议先看上一个博客了解项目结构: springboot 多模块启动报错Field XXX required a bean of type XXX that could not be found. 接下来我们来解决swaggar异常的原因,我们成功启动项目…

QML 布局管理器之ColumnLayout

一.ColumnLayout讲解 QML中的ColumnLayout是一种布局元素,用于在垂直列中排列其子元素。它的主要使用下列附加属性: Layout.minimumWidth Layout.minimumHeight Layout.preferredWidth Layout.preferredHeight Layout.maximumWidth Layout.maximumHeight Layout.fil…

代码随想录算法训练营 Day25|回溯算法2

216.组合总和III 思路 按照回溯算法的逻辑,写代码。 递归函数的参数,除了原有的n, k, startIndex,增加一个sum,计算当前path中的和。 终止条件用sum与n比较,如果满足相等,且满足长度为k,则加入…

WPF-后台设置控件Background

有时候需要在后台设置控件的背景 方法1: Btn_SendNeedle_Admin.Content "送针结束"; Btn_SendNeedle_Admin.Background new SolidColorBrush((Media.Color)Media.ColorConverter.ConvertFromString("#AAFFFFFF")); 方法2: Btn…

SqlServer2008(R2)(一)SqlServer2008(R2)经典宝藏操作收集整理

一、常见操作 1、TRUNCATE TABLE 语句 删除表数据 TRUNCATE TABLE语句比DELET删除表中的所有行更快。从逻辑上讲,TRUNCATE TABLE它类似于DELETE没有WHERE子句的语句。 TRUNCATE TABLE语句从表中删除所有行,但表结构及其列,约束,…

JSON 配置文件

JSON 配置文件的作用 JSON 是一种数据格式,在实际开发中, JSON 总是以配置文件的形式出现。小程序项目中也不例外:通过不同的 .json 配置文件,可以对小程序项目进行不同级别的配置。 小程序项目中有 4 种 json 配置文件&#xff0…

1.AD域控如何强制删除不可以用域控服务器

(1)原因需求 (2)不可用的域控不删掉造成的问题 (3)实战配置步骤 第一步:连接登录到特定服务器 第二步:选择要删除域控所在的站点和名称 第三步:执行删除命令

Ubuntu 20.04 系统如何优雅地安装NCL?

一、什么是NCL? NCAR Command Language(NCL)是由美国大气研究中心(NCAR)推出的一款用于科学数据计算和可视化的免费软件。 它有着非常强大的文件输入和输出功能,可读写netCDF-3、netCDF-4 classic、HDF4、b…

Elasticsearch快速检索的法宝: 倒排索引

倒排索引(Inverted Index)是搜索引擎和信息检索系统中的一个关键数据结构,它允许快速进行全文搜索。在倒排索引中,文档的内容被分析并分割成一系列的词条(tokens),然后每个词条被映射到包含它的…

3048. 标记所有下标的最早秒数 I(补题 ,二分 正序 逆序)

3048. 标记所有下标的最早秒数 I 给你两个下标从 1 开始的整数数组 nums 和 changeIndices ,数组的长度分别为 n 和 m 。 一开始,nums 中所有下标都是未标记的,你的任务是标记 nums 中 所有 下标。 从第 1 秒到第 m 秒(包括 第…

Xinstall助力web唤起iOS,打破平台壁垒,实现无缝跳转

在移动互联网时代,web与App之间的跳转已成为用户日常使用中不可或缺的一部分。然而,对于iOS系统的用户来说,web唤起App的过程往往充满了挑战和不便。这时,Xinstall作为一款专业的移动开发者服务工具,为开发者们提供了解…

在taro开发小程序中,创建全局事件,更新各个tabbar页面数据,适用购物车更新,taro购物车数据同步

在 Taro 小程序开发中实现一个全局的订阅发布机制,可以让你在任何一个 TabBar 页面修改数据时,通知其他 TabBar 页面更新数据。这种机制可以通过自定义事件的方式来实现 步骤 1:创建全局事件管理器 首先,在你的小程序中创建一个…

Lua中文语言编程源码-第一节,更改llex.c词法分析器模块, 使Lua支持中文关键词。

源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的llex.c,是Lua的词法分析器模块。 增加中文保留字标识符列表,保留英文保留字标识符列表。 搜索“ORDER RESERVED”,将原始代码 …

微信小程序开发学习笔记——3.10【小案例】表单提交样式布局与model双向绑定

>>跟着b站up主“咸虾米_”学习微信小程序开发中,把学习记录存到这方便后续查找。 课程连接:3.10.【小案例】表单提交样式布局与model双向绑定_哔哩哔哩_bilibili 一、model简易双向绑定 简单双向绑定语法查阅:小程序框架 / 视图层 /…

ARM和AMD介绍

一、介绍 ARM 和 AMD 都是计算机领域中的知名公司,它们在不同方面具有重要的影响和地位。 ARM(Advanced RISC Machine):ARM 公司是一家总部位于英国的公司,专注于设计低功耗、高性能的处理器架构。ARM 架构以其精简指…

如何在“Microsoft Visual Studio”中使用OpenCV编译应用程序

返回目录:OpenCV系列文章目录(持续更新中......) 前一篇:OpenCV4.9.0在windows系统下的安装 后一篇: 警告: 本教程可以包含过时的信息。 我在这里描述的所有内容都将适用于 OpenCV 的C\C接口。我首先假…

图像处理ASIC设计方法 笔记10 插值算法的流水线架构

(一) 三次插值算法实现的图像旋转设计的流水线架构 传统上,三次插值算法实现的图像旋转设计需要三块一样的处理资源,为了节约资源,采用流水线设计,简单来讲就是三次插值算法共用一块资源,优化这…

Hive Sql获取含有特殊字符key的json数据

hive表中json数据的key含有.符号,所以使用get_json_object(str,“$.key_1.key_2”)语法的时候就会获取到null。解法是通过json_to_map方法将json数据变成一个map结果,然后用key下标的方式获取值,代码 json_to_map(str)["key_1.key_2]

mysql报错日志查看

路径命令 在MySQL命令行客户端中,执行SHOW VARIABLES LIKE log_error;这个命令可以显示log_error系统变量的值,这个值通常指向MySQL的错误日志文件(error log)的路径。通过这个命令,你可以快速找到MySQL的报错日志文件…

数据结构的概念大合集02(线性表)

概念大合集02 1、线性表及其逻辑结构1.1 线性表的定义1.2 线性表的基本操作 2、线性表的顺序存储结构2.1 顺序表 3、线性表的链式存储3.1 链表3.1.1 头结点(头指针),首指针,尾指针,尾结点3.1.2 单链表3.1.3 双链表3.1.…