Flink 集群部署模式

news2024/11/17 10:42:07

文章目录

  • 前言
  • 一、会话模式(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.coloradmin.cn/o/1522037.html

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

相关文章

外包干了3天,技术明显进步。。。。。

先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

奇怪的比赛(Python,递归,状态压缩动态规划dp)

目录 前言:题目:思路:递归:代码及详细注释: 状态压缩dp:代码及详细注释: 总结: 前言: 这道题原本是蓝桥上的题,现在搜不到了,网上关于此题的讲解…

【ESP32接入国产大模型之MiniMax】

1. MiniMax 讲解视频: ESP32接入语言大模型之MiniMax MM智能助理是一款由MiniMax自研的,没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。 随着人工智能技术的不断发展,自然语…

springboot绩效管理系统(源码私信呢)

链接如下: 20240316_173655_哔哩哔哩_bilibili 代码解析理解: 前置知识:三层架构: con...>ser接口>imp接口实现类>mapper写sql语句Controller 层控制层-->调用业务方法来控制业务逻辑 ,功能的请求和响应控制,controller层负责前…

减肥实践和经验分享

在当下竞争激烈、物质丰富的现代社会,每个人都会同时面临两个不同指向的问题 和别人竞争,实现个人价值,创造个人财富,此为:显性指向(explicit)和自己比拼,实现个人内在提升&#xf…

数据库——书籍+内容0.1版本

背景:将一本书,存入我们的数据库中,并可以查出来 采用:第三范式(3NF)设计模式 设计数据库模板 第一范式(1NF):确保表的每一列都是不可分割的原子数据项。 第二范式&…

什么时候去检测大数据信用风险比较合适?

什么时候去检测大数据信用风险比较合适?在当今这个数据驱动的时代,大数据信用风险检测已经成为个人的一项重要需求。本文将从贷前检测、信息泄露检测和定期检测三个方面,阐述何时进行大数据信用风险检测较为合适。 一、贷前检测 大数据信用风险检测在贷…

1.Spring入门

1.1 Spring简介 Spring是一个轻量级Java 企业级应用程序开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。 Spring Fra…

力扣701. 二叉搜索树中的插入操作

思路:往二叉搜索树中插入一个值,树的结构有多种符合的情况,那我们可以选一种最容易的插入方式,反正只需要插入一个值而已,我们不难发现,不管插入什么值,都可以安排插入到叶子节点上。 再利用二叉…

Internet协议的安全性

Internet协议的安全性 文章目录 Internet协议的安全性1. 网络层1. IP*62. ARP*33. ICMP * 3 2. 传输层协议1. TCP1. * SYN-Flood攻击攻击检测* 防御 2. TCP序号攻击攻击 3. 拥塞机制攻击 2. UDP 3. 应用层协议1. DNS攻击*3防范*3: 2. FTP3. TELNET: 改用ssh4. 电子邮件1. 攻击2…

Microsoft Visio 编辑属性值

Microsoft Visio 编辑属性值 1. 编辑属性值References 1. 编辑属性值 单击长度或高度位置,弹出形状的各属性值,点击编辑对应的属性值。 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

解决:IDEA编译Java程序时报编译失败

1、问题展示: 2、解决方法:

自制一个操作系统 第一天

目录 环境准备引导程序 环境准备 自制操作系统的第一个困难是假设我们写好了操作系统,我们怎么模拟运行我们的操作系统?不用担心,已经有现成的模拟工具了,QEMU(Quick Emulator) 是一个广泛使用的开源计算机仿真器和虚拟机。使用它…

2023年中国抗DDoS市场规模现状及竞争格局,公有云抗DDoS是主要增长点

分布式拒绝服务(DDoS)是在DoS基础之上产生的一种新的攻击方式,具有多对一的攻击模式。它通过制造伪造的流量,使得被攻击的服务器、网络链路或是网络设备(如防火墙、路由器等)负载过高,无法处理正…

webpack5零基础入门-5使用webpack处理stylus文件

1.需要下载一个包 npm i stylus-loader 2.功能介绍 stylus-loader:负责将stylus文件编译成css文件 3.配置: const path require(path);//nodejs用来处理路径问题的模块module.exports {/**入口 */entry: ./src/main.js,/**输出 相对路径*/output: {/**文件输…

如何有效地组织和管理自己的代码?

如何有效地组织和管理自己的代码? 🧩 🛠️ 如何有效地组织和管理自己的代码? 🧩摘要引言正文1. 使用合适的目录结构2. 模块化设计3. 命名规范4. 版本控制 总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页——…

008:安装Docker

安装Docker 如果不太熟悉Linux命令,不想学习Linux命令,可以直接看文末NAS面板章节,通过面板,像使用Window一样操作NAS。 一、安装 Docker 1.安装 Docker wget -qO- https://get.docker.com/ | sh2.启动 Docker 服务 sudo sys…

复习知识点

1. Java常用API 1.1 String类 在java中,String类代表字符串,字符串是常量的,不能被改变。如果想改变字符串。可以用字符串的缓冲区,StringBuffer、StringBuilder 1.1.1 String类的创建方式 第一种(常用&#xff09…

数学建模--MATLAB基本使用

1.线性方程组 这个是一个线性方程组(属于线性代数的范畴),Axb类型的方程,如果使用MATLAB进行求解,就需要分别表示A矩阵(线性方程组未知数前面的系数),b矩阵(表示等式右边…

刷题日记——非素数个数(厦大机试)

题目 分析 使用欧拉筛法计算从1到b的素数个数,方法如下: 找到一个素数后,就将它的倍数标记为合数,也就是把它的倍数“筛掉”;如果一个数没有被比它小的素数“筛掉”,那它就是素数。计算出从1到b的…