【大数据】Flink 之部署篇

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.mzph.cn/news/696776.shtml

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

相关文章

【html学习笔记】3.表单元素

1.文本框 1.1 语法 <input type "text">表示文本框。且只能写一行 1.2 属性 使用属性size 设置文本框大小 <input type"text" size"10">2. 使用属性value 来设置文本框的默认文字 <input type"text" size"…

Vue状态管理库-Pinia

一、Pinia是什么&#xff1f; Pinia 是 Vue 的专属状态管理库&#xff0c;它允许支持跨组件或页面共享状态&#xff0c;即共享数据&#xff0c;他的初始设计目的是设计一个支持组合式API的 Vue 状态管理库&#xff08;因为vue3一个很大的改变就是组合式API&#xff09;,当然这…

PFA三角烧瓶实验室PFA锥形瓶本底纯净耐腐蚀性强

PFA三角烧瓶外观呈平底圆锥状&#xff0c;下阔上狭&#xff0c;有一圆柱形颈部&#xff0c;上方有一较颈部阔的开口&#xff0c;可用塞子封闭。PFA三角烧瓶也称PFA锥形瓶&#xff0c;PFA反应瓶&#xff0c;PFA三角烧瓶、PFA依氏烧瓶、PFA锥形烧瓶&#xff0c;PFA鄂伦麦尔瓶等。…

普中51单片机学习(串口通信)

串口通信 原理 计算机通信是将计算机技术和通信技术的相结合&#xff0c;完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类&#xff1a;并行通信与串行通信。并行通信通常是将数据字节的各位用多条数据线同时进行传送 。控制简单、传输速度快&#xff1…

【Python】Python实现串口通信(Python+Stm32)

&#x1f389;欢迎来到Python专栏~Python实现串口通信 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望…

springboot208基于springboot物流管理系统

基于spring boot物流管理系统设计与实现 摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。…

maven工程打包引入本地jar包

1、通过maven生成本地区仓库包 mvn install:install-file --settings D:\lkx\download\apache-maven-3.6.3\conf\settings.xml -Dfileaspose-cad-21.8.jar -DartifactIdaspose-cad -DgroupIdsystem.core -Dversion21.8 -Dpackagingjar -DgeneratePomtrue # --settings&#xf…

进程线程间的通信:2024/2/22

作业1&#xff1a;代码实现线程互斥机制 代码&#xff1a; #include <myhead.h>//临界资源 int num10;//创建一个互斥锁 pthread_mutex_t mutex;//任务一 void *task1(void *arg) {//获取锁资源pthread_mutex_lock(&mutex);num123;sleep(3);printf("task1:num…

PacketSender-用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序

PacketSender-用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序 PacketSender是一款开源的用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序&#xff0c;作者为dannagle。 其官网地址为&#xff1a;https://packetsender.com/&#xff0c;Github源代码地址&#xff1a;htt…

SQL Server —— While语句循环

一&#xff1a;简介 while 循环是有条件的循环控制语句。满足条件后&#xff0c;再执行循环体中的SQL语句。 while: break, 如果有多条语句可以在while后面添加begin-end。关于while的语法 while(条件) -- begin -- 语句1 -- 语句2 -- break 根据情况是否添加break -- end 二…

leetcode日记(32)字符串相乘

做了很久很久……真的太繁琐了&#xff01;&#xff01; class Solution { public:string multiply(string num1, string num2) {string s;string str;if (num1 "0" || num2 "0") return "0";for(int inum2.size()-1;i>0;i--){int c2num2[…

Qt:tabWidget控件

一、tabWidget用来做什么 tabWidget控件用来进行不同控件页面的跳转&#xff0c; 二、控件的一些函数功能 添加一个页面&#xff0c;返回index int addTab(QWidget *widget, const QString &); int addTab(QWidget *widget, const QIcon& icon, const QString &…

pytest教程-11-初识fixture

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了使用allure生成html测试报告的方法&#xff0c;本小节我们讲解一下pytest fixture测试夹具的使用方法。 前言 在做自动化的过程中&#xff0c;编写用例时候需要用到用例的前置和用例的后置&a…

2024年了,抖店还能做吗?适合新手吗?

我是电商珠珠 现在已经24年了&#xff0c;抖店也已经发展了四年了。其中有很多在门外观望的人&#xff0c;还在犹豫不决。认为抖店发展到今天&#xff0c;所有的红利早已在20年的时候就消失殆尽了&#xff0c;特别是没有经验的如果入驻了&#xff0c;既不能享受平台红利&#…

后端程序员入门react笔记(四)-综合运用,写一个小demo

样式模块化 有时候我们会遇到这样的问题&#xff0c;有两个css对一个class声明了样式&#xff0c;这样的话后引入的css会覆盖前面的css样式&#xff0c;导致样式冲突&#xff0c;那么我们怎么解决这种问题呢&#xff0c;我们可以使用样式的模块化&#xff0c;我们起名一个inde…

OpenHarmony驱动框架HDF中设备管理服务构建过程详解

前言 如下图&#xff0c;开源鸿蒙系统驱动框架HDF在内核中的实现&#xff0c;可以分为向用户层提供设备服务的管理模块&#xff08;Manager&#xff09;&#xff0c;和实际管理硬件的Host模块。 Manager分为DeviceManageService和 DeviceServiceManage&#xff0c;前者负责提供…

1.WEB渗透测试-前置基础知识-ip地址

ip地址&#xff1a; ip地址指的是互联网协议地址&#xff0c;是IP协议提供的一种统一的地址格式&#xff0c;以每一台联网的主机都有一个对应的ip地址&#xff0c;ip地址也可以理解为分配给用户上网使用的网际协议的设备的数字标签。通俗的来说就是你打电话时候的每个人都有自己…

在Mac上搭建MongoDB环境

最近工作中需要装MongoDB环境&#xff0c;搭建过程中遇到了一些问题&#xff0c;在这里记录一下安装MongoDB环境的方法以及问题的解决方法。有两种安装MongoDB的方法&#xff1a;brew安装和手动安装。 目录 使用Homebrew安装MongoDB 手动安装MongoDB&#xff08;不使用Homebr…

vue--两种定时任务cron表达式组件比较选择

背景&#xff1a; 使用vue页面中cron表达式的组件&#xff0c;实现定时任务参数配置。 方案1 vue-cron 安装插件 npm install vue-cron --save 全局引入&#xff0c;修改main.js import Vue from vue import VueCron from vue-cron Vue.use(VueCron);页面配置 html<el-…

Java入门-可重入锁

可重入锁 什么是可重入锁? 当线程获取某个锁后&#xff0c;还可以继续获取它&#xff0c;可以递归调用&#xff0c;而不会发生死锁&#xff1b; 可重入锁案例 程序可重入加锁 A.class,没有发生死锁。 sychronized锁 package com.wnhz.lock.reentrant;public class Sychroniz…