Flink部署与应用——部署方式介绍

引入

我们通过Flink相关论文的介绍,对于Flink已经有了初步理解,这里简单的梳理一下Flink常见的部署方式。

Flink 的部署方式 

StandAlone模式

介绍

StandAlone模式是Flink框架自带的分布式部署模式,不依赖其他的资源调度框架,特点:

  • 分布式多台物理主机部署
  • 依赖于Java8或Java11JDk环境
  • 仅支持Session模式提交Job
  • 支持高可用配置

但是有以下缺点:

  • 资源利用弹性不够(资源总量是定死的;job退出后也不能立刻回收资源)
  • 资源隔离度不够(所有job共享集群的资源)
  • 所有job共用一个jobmanager,负载过大
  • 只能运行Flink程序,不能能运行其他的编程模型

OnYarn模式

介绍

YARN是一个通用的资源调度框架,特点是:

  • 可以运行多种编程模型,例如MR、Storm、Spark、Flink等
  • 性能稳定,运维经验丰富
  • 灵活的资源分配和资源隔离
  • 每提交一个application都会有一个专门的ApplicationMater(JobManager)

ResouManager(NM):

  • 负责处理客户端请求
  • 监控NodeManager
  • 启动和监控APPlicationMaster
  • 资源的分配和调度

NodeManager:

  • 管理单个Worker节点上的资源
  • 处理来自ResourceManager的命令
  • 处理来自ApplicationMaster的命令
  • 汇报资源状态

ApplicationMaster:

  • 负责数据的切分
  • 为应用申请计算资源,并分配给Task
  • 任务的监控与容错
  • 运行在Worker节点上 

Container:

  • 资源抽象,封装了节点上的多维度资源,如CPU,内存,网络资源等

Flink On Yarn 的三种模式

Flink程序可以运行为以下3种模式:

  • Application Mode【生产中建议使用的模式】:每个job独享一个集群,job退出集群则退出,用户类的main方法在集群上运行
  • Per-Job Mode:每个job独享一个集群,job退出集群则退出,用户类的main方法在client端运行;(大job,运行时长很长,比较合适;因为每起一个job,都要去向yarn申请容器启动jm,tm,比较耗时)
  • Yarn Session Mode:多个job共享同一个集群<jobmanager/taskmanager>、job退出集群也不会退出,用户类的main方法在client端运行;(需要频繁提交大量小job的场景比较适用;因为每次提交一个新job的时候,不需要去向yarn注册应用)

上述3种模式的区别点在:
集群的生命周期和资源的隔离保证
用户类的main方法是运行在client端,还是在集群端

yarn application模式提交

bin/flink run-application -t yarn-application \
-yjm 1024 -yqu default -ys 2 \
-ytm 1024 -p 4 \
-c com.chaos.flink.java.KafkaSinkYarn /root/flink_test-1.0.jar
  • bin/flink run-application :这是用于运行 Flink 应用程序的命令入口。
  • -t yarn-application :指定在 YARN 集群上运行应用程序。
  • -yjm 1024 :设置 JobManager 的内存大小为 1024 MB。
  • -yqu default :指定 YARN 队列的名称为 default。
  • -ys 2 :设置 YARN 服务,这里可能是指 YARN 的一些特定配置,比如在 YARN 上运行的实例数量。
  • -ytm 1024 :设置 TaskManager 的内存大小为 1024 MB。
  • -p 4 :设置 Flink 作业的并行度为 4。
  • -c com.chaos.flink.java.KafkaSinkYarn :指定主类的完整类名为 com.chaos.flink.java.KafkaSinkYarn,这是应用程序的入口类。
  • /root/flink_test-1.0.jar :指定要运行的 Flink 应用程序的 JAR 包路径。 

yarn perJob模式提交

Yarn-Per-Job 模式:每个作业单独启动集群,隔离性好,JM(JobManager) 负载均衡,main 方法在客户端执行。在 per-job 模式下,每个 Job 都有一个 JobManager,每个TaskManager 只有单个 Job。  

特点: 一个任务会对应一个 Job,每提交一个作业会根据自身的情况,都会单独向 yarn申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享 Dispatcher 和 ResourceManager,按需接受资源申请;适合规模大长时间运行的作业。

提交命令 (申请容器启动flink集群以及提交job,是合二为一的)

bin/flink run -m yarn-cluster -yjm 1024 \
-ytm 1024 -yqu default -ys 2   -p 4 \
-c com.chaos.TaskDemo  /root/flink_test-1.0.jar
  • -m:master的运行模式
  • -yjm:JobManager的所在Yarn容器的内存大小
  • -ytm:TaskManager的所在Yarn容器额内存大小
  • -yqu:Yarn任务队列的名称
  • -ys:每个TaskManager的slot数量
  • -p:并行度
  • -c:main方法全类名

yarn session模式提交

Yarn-Session 模式:所有作业共享集群资源,隔离性差,JM 负载瓶颈,main 方法在客户端执行。适合执行时间短,频繁执行的短任务,集群中的所有作业 只有一个 JobManager,另外,Job 被随机分配给 TaskManager  

特点: Session-Cluster 模式需要先启动集群,然后再提交作业,接着会向 yarn 申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到 yarn 中的其中一个作业执行完成后,释放了资源,下个作业才会正常提交。所有作业共享 Dispatcher 和 ResourceManager;共享资源;适合规模小执行时间短的作业。

  1. 基本操作命令
    # 提交命令:
    bin/yarn-session.sh –help# 停止命令:
    yarn application -kill application_1550836652097_0002
  2. 具体操作步骤
    1. 先开辟资源启动session模式集群
      # 老版本: 
      bin/yarn-session.sh -n 3 -jm 1024 -tm 1024
      # -n --> 指定需要启动多少个Taskmanager# 新版本: 
      bin/yarn-session.sh -jm 1024  -tm 1024  -s 2  -m yarn-cluster -ynm hello -qu default -jm:jobmanager memory  
      -tm:taskmanager memory
      -m yarn-cluster:集群模式(yarn集群模式)
      -s:规定每个taskmanager上的taskSlot数(槽位数)
      -nm:自定义appliction名称
      -qu:指定要提交到的yarn队列
    2. 启动的服务进程
      YarnSessionClusterEntrypoint(AppMaster,即JobManager)
      注意:此刻并没有taskmanager,也就是说,taskmanager是在后续提交job时根据资源需求动态申请容器启动的。
    3. 向已运行的session模式集群提交job
      bin/flink run -d -yid application_1550579025929_62420 -p 4 -c com.chaos.flink.java.TaskDemo /root/flink_test-1.0.jar

Flink On Yarn 的优劣势

优势:

  • 与现有大数据平台无缝对接(Hadoop2.4+)
  • 部署集群与任务提交都非常简单
  • 资源管理统一通过Yarn管理,提升整体资源利用率类
  • 基于Native方式,TaskManager资源按需申请和启动,防止资源浪费
  • 容错保证:借助于Hadoop Yarn提供的自动failover机制,能保证JobManager,TaskManager节点异常恢复

劣势:

  • 资源隔离问题,尤其是网络资源的隔离,Yarn做的还不够完善
  • 离线和实时作业同时运行相互干扰等问题需要重视
  • Kerberos认证超期问题导致Checkpoint无法持久化

On Kubernetes模式

介绍

Flink on Kubernetes 是将 Apache Flink 部署在 Kubernetes 集群上的一种方式,使用户能够利用 Kubernetes 的强大功能进行资源管理、弹性伸缩和高可用性管理。

Master节点:

  • 负责整个集群的管理,资源管理
  • 运行APIServer,ControllerManager,Scheduler服务
  • 提供Etcd高可用键值存储服务,用来保存Kubernetes集群所有对象的状态信息和网络信息

Node:

  • 集群操作的单元,Pod运行宿主机
  • 运行业务负载,业务负载会以Pod的形式运行

Kubelet:

  • 运行在Node节点上,维护和管理该Node上的容器

Container Runtime:

  • Docker容器运行环境,负责容器的创建和管理

Pod:

  • 运行在Node节点上,多个相关Container的组合
  • Kubunetes创建和管理的最小单位

核心概念

  • ReplicationController(RC):RC是K8s集群中最早的保证Pod高可用的API对象,通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。
  • Service:Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。
  • PersistentVolume(PV):容器的数据都是非持久化的,在容器消亡以后数据也跟着丢失,所以Docker提供了Volume机制以便将数据持久化存储。
  • ConfigMap:ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。

Flink On Kubunetes的三种模式

Session 模式:启动一个长期运行的 Flink 集群,所有作业共享该集群资源。适合多个作业需要共享资源的场景。

Application 模式:为每个作业启动一个独立的 Flink 集群,作业之间资源隔离,互不影响。

Native Kubernetes 模式:Flink 原生支持 Kubernetes,通过 Kubernetes API 进行资源管理和调度,能够动态分配和释放 TaskManager。

Flink On Kubunetes的优缺点

优点:

  • 强大的资源管理与弹性伸缩:Kubernetes 可根据作业负载动态分配和释放资源,实现 Flink 集群的弹性伸缩。这提高了资源利用率,降低了成本,尤其在业务波动时可快速调整资源以满足需求。

  • 高可用性与容错能力:Kubernetes 能自动重启故障 Pod 并重新调度 TaskManager,确保 Flink 作业持续运行,保障数据处理的可靠性和稳定性。

  • 深度云原生集成:Flink on Kubernetes 与云原生生态系统深度融合,可与云服务(如对象存储、消息队列)无缝协作,便于构建完整的云原生数据处理解决方案。

  • 简化的部署与运维:通过 Flink Kubernetes Operator 提供的抽象接口,用户可以更高效地部署和管理 Flink 集群,减少手动操作,降低运维负担。

  • 多租户支持:Kubernetes 的命名空间功能可实现多租户隔离,为多团队或项目共用集群提供了便利,提高了资源的隔离性和安全性。

缺点:

  • 部署复杂度增加:与在专用集群上部署 Flink 相比,Flink on Kubernetes 需要熟悉 Kubernetes 的概念和工具(如 Pod、Deployment、Service 等),增加了学习曲线和部署前的准备工作。

  • 资源管理的潜在挑战:Kubernetes 的资源调度策略可能与 Flink 的需求不完全匹配,导致资源分配效率降低。例如,在某些情况下,Kubernetes 的默认调度算法可能无法满足 Flink 对数据本地性的要求,影响作业性能。

  • 性能开销:在 Kubernetes 上运行 Flink 会引入额外的性能开销,包括容器的启动时间和 Kubernetes 的调度延迟。此外,如果 Kubernetes 集群的资源紧张,可能导致 Flink 作业的性能下降。

  • 网络配置复杂性:在 Kubernetes 集群中,网络配置可能较为复杂,需要确保 Flink 的各个组件之间能够正确通信。

  • 长期运行作业的资源管理:对于长期运行的 Flink 作业,需要持续监控和管理资源使用情况。Kubernetes 的资源配额和限制机制可以帮助控制资源使用,但需要合理配置以避免对作业的性能产生负面影响。

 

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

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

相关文章

【智慧城市】新中地GIS开发实训:基于 Vue 框架的武汉智慧旅游系统

首页 地球自转页 控制台页 景点信息页 天气预报页 路线规划页 查询页 AI问答页 热力图页 测量页 来源&#xff1a; 【智慧城市】新中地GIS开发实训&#xff1a;优秀学生项目作品&#xff08;58&#xff09;基于 Vue 框架的武汉智慧旅游系统

C++入侵检测与网络攻防之网络嗅探以及ARP攻击

目录 1.tcpdump基本使用 2.tcpdump条件过滤 3.wireshark介绍 4.wireshark的介绍 5.tcp握手挥手分析 6.telnet服务的介绍和部署 7.复习 8.telnet服务的报文嗅探 9.网络嗅探基础 10.arp协议的解析 11.arp攻击原理以及试验环境 12.arp实验以及防御方式 1.tcpdump基本使…

【数据可视化-28】2017-2025 年每月产品零售价数据可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

系统与网络安全------弹性交换网络(3)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 STP协议 环路的危害 单点故障 PC之间的互通链路仅仅存在1个 任何一条链路出现问题&#xff0c;PC之间都会无法通信 解决办法 提高网络可靠性 增加冗余/备份链路 增加备份链路后交换网络上产生二层环路 …

广州 3D 展厅开启企业展示新时代​

为了突破传统展厅的局限&#xff0c;满足企业日益增长的展示需求&#xff0c;3D 展厅应运而生。3D 展厅是利用虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和三维建模等先进技术&#xff0c;构建出的一个高度逼真的数字化展示空间 。它打破了传统展…

C++初登门槛

多态 一、概念 多态是指不同对象对同一消息产生不同响应的行为。例如&#xff0c;蓝牙、4G、Wi-Fi 对“发送数据”指令有不同的具体实现。 二、核心理解 本质&#xff1a;通过基类指针或引用操作子类对象&#xff0c;实现运行时动态绑定。 表现形式&#xff1a; 接口统一&a…

文件上传详细版

文件上传造成因素&#xff1a; 文件路径过滤不严格&#xff0c;可能通过遍历目录来获得文件&#xff0c;也可能通过文件上传对重要文件案进行覆盖&#xff0c;还可能对文件拓展名和文件类型过滤不严格&#xff0c;可以上传任意文件到web公开目录上&#xff0c;进而远程控制服务…

华为网路设备学习-19 IGP路由专题-路由策略

一、 二、 注意&#xff1a; 当该节点匹配模式为permit下时&#xff0c;参考if else 当该节点匹配模式为deny下时&#xff1a; 1、该节点中的apply子语句不会执行。 2、如果满足所有判断&#xff08;if-match&#xff09;条件时&#xff0c;拒绝该节点并跳出&#xff08;即不…

智能指针之设计模式4

前面的文章介绍了使用工厂模式来封装智能指针对象的创建过程&#xff0c;下面介绍一下工厂类 enable_shared_from_this的实现方案。 4、模板方法模式 在前面的文章分析过&#xff0c;enable_shared_from_this<T>类是一个工厂基类&#xff0c;提供的工厂方法是shared_f…

【Nova UI】十、打造组件库第一个组件-图标组件(下):从.svg 到 SVG Vue 组件的高效蜕变✨

序言 在组件库开发的精彩旅程中&#x1f680;&#xff0c;我们已经成功打造并完善了图标组件体系&#xff0c;赋予其强大的功能和丰富的表现力&#x1f389;。然而&#xff0c;随着业务版图的不断扩张&#x1f310;&#xff0c;手动逐个编写 SVG Vue 组件的传统方式&#xff0…

Golang | 倒排索引

文章目录 倒排索引的设计倒排索引v0版实现 倒排索引的设计 通用搜索引擎 v.s. 垂直搜索引擎&#xff1a; 通用搜索引擎&#xff1a;什么都可以搜索&#xff0c;更加智能化垂直搜索引擎&#xff1a;只能搜自家数据库里面的内容&#xff0c;一般都带着搜索条件&#xff0c;搜索一…

Windows 10 上运行 Ollama 时遇到 llama runner process has terminated: exit status 2

在 Windows 10 上运行 Ollama 时遇到 llama runner process has terminated: exit status 2 错误&#xff0c;可能是由多种原因引起的。以下是逐步解决方案&#xff1a; 1. 检查 Ollama 服务状态 按 Win R 输入 services.msc&#xff0c;找到 Ollama 服务&#xff0c;确保其状…

PCI 总线学习笔记(五)

PCI 总线学习系列&#xff0c;参考自 技术大牛博客&#xff1a; PCIe 扫盲系列博文连载目录篇 书籍&#xff1a;王齐老师的《PCI Express 体系结构导读》 下面的文章中加入了自己的一些理解和实际使用中遇到的一些场景&#xff0c;供日后查询和回忆使用 PCI 总线定义了两类配置…

Spring Cloud Alibaba VS Spring Cloud

​​Spring Cloud Alibaba 与 Spring Cloud 组件对比​ ​​服务发现与注册中心​ 功能​​​Spring Cloud​​​Spring Cloud Alibaba​对比说明​​核心组件​EurekaNacosNacos 支持动态配置管理、健康检查更灵活&#xff0c;且提供 DNS 服务发现能力。​​​​健康检查​​…

Java—— 常见API介绍 第五期

JDK8以后新增的时间相关类 Date类ZoneId&#xff1a;时区Instant&#xff1a;时间戳ZoneDateTime&#xff1a;带时区的时间 日期格式化类 SimpleDateFormat DateTimeFormatter&#xff1a;用于时间的格式化和解析 日历类 Calendar LocalDate&#xff1a;年、月、日LocalTime…

Java与Kotlin在Android开发中的全面对比分析

趋势很重要 语言发展背景与现状 Android操作系统自2008年正式发布以来&#xff0c;Java长期作为其主要的开发语言。这种选择源于Java语言的跨平台特性、成熟的生态系统以及广泛开发者基础。然而&#xff0c;随着移动开发需求的快速演变&#xff0c;Java在Android开发中逐渐暴…

第一部分:git基本操作

目录 1、git初识 1.1、存在的问题 1.2、版本控制器 1.3、git安装 1.3.1、CentOS平台 1.3.2、ubuntu平台 2、git基本操作 2.1、创建仓库 2.2、配置git 3、工作区、暂存区、版本库 4、基本操作 4.1、场景一 4.2、场景二 4.3、修改文件 5、版本回退 6、撤销修改 …

正则表达式与python使用

一、Python正则表达式基础 1. 导入模块 Python通过 re 模块实现正则表达式功能&#xff0c;需先导入模块&#xff1a; import re2. 核心语法 普通字符&#xff1a;直接匹配字面值&#xff08;如 a 匹配字符 a&#xff09;。元字符&#xff1a; \d&#xff1a;匹配数字&…

从FP32到BF16,再到混合精度的全景解析

笔者做过目标检测模型、超分模型以及扩散生成模型。其中最常使用的是单精度FP32、半精度FP16、BF16。 双精度"FP64"就不说了&#xff0c;不太会用到。 #1. 单精度、半精度和混合精度 单精度&#xff08;FP32&#xff09;、半精度&#xff08;FP16&#xff09;和混合…

Hot100方法及易错点总结2

本文旨在记录做hot100时遇到的问题及易错点 五、234.回文链表141.环形链表 六、142. 环形链表II21.合并两个有序链表2.两数相加19.删除链表的倒数第n个节点 七、24.两两交换链表中的节点25.K个一组翻转链表(坑点很多&#xff0c;必须多做几遍)138.随机链表的复制148.排序链表 N…