【大数据】Flink 之部署篇

news2024/12/26 14:27:11

Flink 之部署篇

  • 1.概述和参考架构
  • 2.可重复的资源清理
  • 3.部署模式
    • 3.1 Application 模式
    • 3.2 Per-Job 模式(已废弃)
    • 3.3 Session 模式

Flink 是一个多用途框架,支持多种不同的混合部署方案。下面,我们将简要介绍 Flink 集群的构建模块、它们的用途和可用实现。如果您只想在本地启动 Flink,我们建议您建立一个独立集群(Standalone Cluster)。

1.概述和参考架构

下图显示了每个 Flink 群集的构件。总有一个客户端在运行,它接收 Flink 应用程序的代码,将其转换为 JobGraph 并提交给 JobManager。

JobManager 会将工作分配给 TaskManager,实际的算子(如 sourcestransformationssinks 等)就在 TaskManager 上运行。

部署 Flink 时,每个构件通常有多个可用选项。我们在下表列出了这些选项。

在这里插入图片描述

组件
作用
实现
Flink Client将批处理或流应用程序编译成数据流图,然后提交给 JobManager。1️⃣ Command Line Interface
2️⃣ REST Endpoint
3️⃣ SQL Client
4️⃣ Python REPL
JobManagerJobManager 是 Flink 中央工作协调组件的名称。它为不同的资源提供者提供不同的实现,这些实现在高可用性、资源分配行为和支持方面各不相同。

作业提交的 JobManager 模式:
(1)Application 模式:专门为一个应用程序运行群集。作业的 main 方法(或客户端)在 JobManager 上执行。支持在一个应用程序中多次调用 execute / executeAsync
(2)Per-Job 模式:只为一个作业运行集群。作业的 main 方法(或客户端)仅在群集创建之前运行。
(3)Session 模式:一个 JobManager 实例管理多个作业,共享同一个任务管理器集群。
1️⃣ Standalone(这是裸机模式,只需要启动 JVM。在此模式下,可通过手动设置使用 Docker、Docker Swarm / Compose、 non-native Kubernetes 和其他模式进行部署)
2️⃣ Kubernetes
3️⃣ YARN
TaskManager任务管理器是实际执行 Flink 作业的服务。
外部组件
作用
实现
High Availability Service ProviderFlink 的 JobManager 可在高可用性模式下运行,这使得 Flink 能够从 JobManager 故障中恢复。为了更快地进行故障切换,可以启动多个备用 JobManager 作为备份。1️⃣ Zookeeper
2️⃣ Kubernetes HA
File Storage and Persistency对于检查点(流作业的恢复机制),Flink 依赖于外部文件存储系统请参阅 “文件系统” 页面
Resource ProviderFlink 可通过不同的资源提供者框架(如 Kubernetes 或 YARN)进行部署。参见上文的 JobManager 实现。
Metrics StorageFlink 组件可报告内部指标,Flink 作业也可报告额外的特定作业指标。请参阅 “指标报告器” 页面
Application-level data sources and sinks虽然从技术上讲,应用级数据源和汇并不是 Flink 群集组件部署的一部分,但在规划新的 Flink 生产部署时,应考虑到这一点。将常用数据与 Flink 同地放置可带来显著的性能优势。例如:
1️⃣ Apache Kafka
2️⃣ Amazon S3
3️⃣ Elasticsearch
4️⃣ Apache Cassandra
请参阅 “连接器” 页面

2.可重复的资源清理

一旦作业达到 完成失败取消 的全局终端状态,与作业相关的外部组件资源就会被清理。如果资源清理失败,Flink 会尝试重试清理。您可以配置所使用的重试策略。重试次数达到最大值而不成功,会使作业处于脏状态。其工件需要手动清理(更多详情,请参阅 High Availability Services / JobResultStore 部分)。重新启动相同的作业(即使用相同的作业 ID)将导致清理工作被重新启动,而不会再次运行作业。

3.部署模式

Flink 的部署模式有 ApplicationPer-JobSession 模式。三者的主要区别:

  • 1️⃣ 集群与作业的生命周期是否一致。
  • 2️⃣ 资源的隔离程度。
  • 3️⃣ 作业的 mian() 运行在 Client 还是集群上。

在这里插入图片描述

3.1 Application 模式

  • 将启动一个专用的 JobManager 来提交作业。JobManager 将只执行此作业,然后退出。Flink 应用程序在 JobManager 上运行。
  • 作业与 Flink 集群打包在一起,在 JobManager 启动的时候会执行作业的 main 函数直接启动作业,而不需要通过 Flink Client 提交作业。
  • 作业的生命周期与 Flink 集群的一致,即作业关闭后 Flink 集群也会关闭。

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

在此基础上,Application 模式为每个提交的应用程序创建一个集群,但这次应用程序的 main() 方法由 JobManager 执行。为每个应用程序创建一个集群可视为创建一个会话集群,仅在特定应用程序的作业之间共享,并在应用程序结束时关闭。通过这种架构,应用程序模式可提供与 Per-Job 模式相同的资源隔离和负载平衡保证,但其粒度为整个应用程序。

应用程序模式基于这样一个假设:所有需要访问用户 jars 的 Flink 组件(JobManager、TaskManager)的类路径(usrlib 文件夹)上都有用户 jars。换句话说,您的应用程序与 Flink 发行版捆绑在一起。这样,Application 模式就不必像其他部署模式那样通过 RPC 向 Flink 组件分发用户 jars,从而加快了部署 / 恢复过程。

Application 模式假定用户 jars 与 Flink 发行版捆绑在一起。在集群上执行 main() 方法可能会对您的代码产生其他影响,例如您使用 registerCachedFile() 在环境中注册的任何路径都必须能被应用程序的 JobManager 访问。

Per-Job已废弃)模式相比,Application 模式允许提交由多个作业组成的应用程序。作业的执行顺序不受部署模式的影响,但受用于启动作业的调用的影响。execute() 是阻塞式的,它会建立一个顺序,并导致 “下一个” 作业的执行被推迟,直到 “这个” 作业完成。使用 executeAsync()(非阻塞)会导致 “下一个” 作业在 “这个” 作业完成前开始执行。

应用模式允许 multi-execute() 应用,但在这种情况下不支持高可用性。应用模式下的高可用性仅支持single-execute() 应用程序。此外,当应用程序模式下多个正在运行的作业(例如使用 executeAsync() 提交的作业)中的任何一个被取消时,所有作业都将停止,而 JobManager 也将关闭。支持常规作业完成(通过源关闭)。

3.2 Per-Job 模式(已废弃)

  • 将启动一个专用的 JobManager 来提交作业。JobManager 将只执行此作业,然后退出。Flink 应用程序在提交每个作业集群的客户端上运行。
  • 作业与 Flink 集群不是打包在一起,在 JobManager 启动后需要通过 Flink Client 提交作业,即增加了网络传输的压力和客户端的 CPU 资源。

Per-Job 模式仅受 YARN 支持,在 Flink 1.15 中已被弃用。它将在 FLINK-26000 中被弃用。请考虑使用 Application 模式在 YARN 上按任务启动专用集群。

为了提供更好的资源隔离保证,Per-Job 模式使用可用的资源提供者框架(如 YARN)为每个提交的作业启动一个集群。该集群只对该作业可用。当作业完成后,集群会被拆除,任何残留的资源(文件等)都会被清除。这提供了更好的资源隔离,因为行为不端的作业只能导致其自身的 TaskManager 宕机。此外,由于每个作业都有一个 TaskManager,它还能将记账的负担分散到多个 TaskManager 中。

🚀 Application 模式对比 Per-Job 模式最大的区别是,前者使用 executeAsync() 提交作业(不阻塞),而后者使用 execute() 提交作业(阻塞),因此 Application 模式可以运行多个作业。

3.3 Session 模式

  • 多个作业共享一个 JobManager。
  • 常驻的 JobManager,多个作业共享同一个集群。如果其中一个作业异常导致 TaskManager 关闭,则该 TM 上的全部作业都会重新调度。

Session 模式假定有一个已在运行的集群,并使用该集群的资源来执行任何已提交的应用程序。在同一(Session)集群中执行的应用程序使用相同的资源,因此也会竞争相同的资源。这样做的好处是,您无需为每个提交的作业支付启动整个群集的资源开销。但是,如果其中一个作业出现问题或导致 TaskManager 宕机,那么在该 TaskManager 上运行的所有作业都会受到故障影响。这除了会对导致故障的作业造成负面影响外,还意味着所有重新启动的作业都会同时访问文件系统,从而导致其他服务无法使用文件系统,这就意味着潜在的大规模恢复过程。此外,单个集群运行多个作业意味着 JobManager 要承担更多的负荷,因为它要负责管理群集中的所有作业。

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

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

相关文章

免费搭建个人网盘

免费搭建一个属于个人的网盘。 服务端 详情请参考原网站的服务端下载和安装虚拟磁盘Fuse4Ui可以支持把网盘内容挂载成系统的分区; 挂载工具效果图:应用端应用端的下载 效果图

教你零基础制作产品画册,打开线上市场

​ 随着市场竞争的日益激烈,越来越多的企业开始注重产品的宣传和推广。而产品画册作为产品宣传的重要手段之一,也越来越受到企业的关注。今天,分享一个零基础制作产品画册的方法,帮助你打开线上市场的大门 1.选择合适的企业宣传…

代码随想录算法训练营第58天 | 392.判断子序列 115.不同的子序列

判断子序列 这道题可以双指针方法解决。 class Solution { public:bool isSubsequence(string s, string t) {int s_index 0;for(int t_index 0; t_index < t.size(); t_index) {if(s[s_index] t[t_index]) {s_index;}}return s_index s.size();} };用动态规划也是可解…

cilium-agent远程debug

文章目录 概述编译cilium-agent运行cilium-agent开启远程debug参考资料 概述 通过远程 debug&#xff0c;来分析 cilium-agent 是如何在容器创建的时候定义容器网络接口。 编译cilium-agent 首先是在本地编译 cilium-agent&#xff0c;下面是以 v1.14.4 的代码作为例子来阐述…

AJAX.

概念:AJAX&#xff1a;异步的 JavaScript 和 XML AJAX作用: 1.与服务器进行数据交换: 通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的是数据 使用了AJAX和服务器进行通讯&#xff0c;就可以使用HTML和AJAX来替换JSP页面了 2.异步交互:可以在不重新加载整个页面的…

VSCode The preLaunchTask ‘C/C++: clang++ 生成活动文件‘ terminated with exit code -1

更改tasks.json文件里面的type为shell 选择g 选择g&#xff0c;然后点回到text.c&#xff0c;按下F5. 得到结果。 文中内容参考: 从零开始手把手教你配置属于你的VS Code_哔哩哔哩_bilibili https://blog.csdn.net/qq_63872647/article/details/128006861

Windows7安装指南

概要&#xff1a; 本篇演示Windows7的安装过程 一、说明 1、电脑 笔者的电脑品牌是acer(宏碁/宏基) 电脑开机按F2可进入BIOS 2、Windows7启动U盘 Windows7启动U盘作为Windows7的安装来源 该U盘的制作可参考笔者的文章 Windows制作Windows的U盘启动盘 Windows7没有USB…

《图解HTTP》笔记1:http的诞生

1&#xff0c;http的诞生&#xff1a; 1.1 为共享知识而生 我们现在使用web&#xff08;World Wide Web的简称&#xff0c;即万维网&#xff09;浏览器&#xff0c;目前可以输入一个网址&#xff08;http://www.baidu.com)&#xff0c;就会有一个网页显示出来。 最开始设想出…

百面嵌入式专栏(经验篇)如何在面试中介绍自己的项目经验

文章目录 1. 在面试前准备项目描述,别害怕,因为面试官什么都不知道2. 准备项目的各种细节,一旦被问倒了,就说明你没做过3.不露痕迹地说出面试官爱听的话4.一定要主动,面试官没有义务挖掘你的亮点5.一旦有低级错误,可能会直接出局6.引导篇:准备些加分点,在介绍时有意提到…

36、IO进程线程/进程和线程之间的通信练习

一、使用有名管道完成两个进程的相互通信(提示&#xff1a;可以使用多进程或多线程完成)。 代码1&#xff1a;创建两个有名管道文件 #include<myhead.h>int main(int argc, const char *argv[]) {if(mkfifo("./mingtohua",0664)-1)//创建小明向小华发信息的管…

【CSS】设置文字(文本)的渐变色

# 渐变色 文字 第一步 设置渐变颜色 background: linear-gradient(278.83deg, #5022bd 31.42%, #8636d1 75.55%); // 先设置渐变色背景&#xff1b; 第二步 设置颜色的使用范围 background-clip: text; // 背景被裁剪成文字的前景色。 -webkit-background-clip: text; 第三步…

C#使用一个泛型方法操作不同数据类型的数组

目录 一、泛型方法及其存在的意义 二 、实例 1.源码 2.生成效果 再发一个泛型方法的示例。 一、泛型方法及其存在的意义 实际应用中&#xff0c;查找或遍历数组中的值时&#xff0c;有时因为数组类型的不同&#xff0c;需要对不同的数组进行操作&#xff0c;那么,可以使用…

大工程 从0到1 数据治理 数仓篇(sample database classicmodels _No.7)

大工程 从0到1 数据治理 之数仓篇 我这里还是sample database classicmodels为案列&#xff0c;可以下载&#xff0c;我看 网上还没有类似的 案列&#xff0c;那就 从 0-1开始吧&#xff01; 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参…

ChatGPT学习第二周

&#x1f4d6; 学习目标 自然语言处理&#xff08;NLP&#xff09;简介 探索自然语言处理的基本原理&#xff0c;理解其在ChatGPT中的应用。 GPT模型概述 了解生成式预训练变换器&#xff08;GPT&#xff09;的工作原理。 ✍️ 学习活动 学习资料 《走进AI(三) | 解构 NLP…

WEB APIs (4)

日期对象 实例化 代码中出现new关键字&#xff0c;创建时间对象 得到当前时间&#xff1a; const date new Date&#xff08;&#xff09; 获得指定时间&#xff1a; const date new Date&#xff08;‘2022-5-1’&#xff09; 方法作用说明getFullYear()获取年份获取…

【IDEA关闭项目一直转圈】

IDEA关闭项目一直转圈&#xff1a; IDEA启动时&#xff0c;会自动打开上次关闭时所有显示的窗口&#xff0c;如果本次工作不需要上次打开的所有窗口&#xff0c;可以基于选择窗口界面的右上角去关闭。 项目关闭失败 但是偶尔会出现窗口关闭时&#xff0c;一直显示“正在关闭项…

【2024软件测试面试必会技能】Charles(5):Charles设置过滤

设置过滤 一、只展示window/mac上的指定网址 方法一&#xff1a;右击域名——Focus——可针对该域名以外的其他域名都进行过滤&#xff0c;只展示该域名的请求数据。如下图&#xff1a; 方法二&#xff1a; 在Filter输入框中输入指定域名对其他的进行过滤&#xff1b;只展示指…

51单片机学习(3)-----独立按键控制LED的亮灭状态

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步了。 目录 一. 器件介绍及实验原理 1.独立按键 &#xff08;1&#xff09;独…

【算法】复杂度分析

第一章、如何分析代码的执行效率和资源消耗 我们知道&#xff0c;数据结构和算法解决的是“快”和“省”的问题&#xff0c;也就是如何让代码运行得更快&#xff0c;一级如何让代码更节省计算机的存储空间。因此&#xff0c;执行效率是评价算法好坏的一个非常重要的指标。那么&…

【PX4学习笔记】04.QGC地面站的使用

目录 文章目录 目录PX4代码烧入PX4固件代码的烧入方式1PX4固件代码的烧入方式2 QGC地面站的基础使用连接地面站的方式查看关键的硬件信息 QGC地面站的Application Settings模块Application Settings模块-常规界面单位其他设置数据持久化飞机中的数传日志飞行视图计划视图自动连…