【大数据】Flink 架构(二):数据传输

Flink 架构》系列(已完结),共包含以下 6 篇文章:

  • Flink 架构(一):系统架构
  • Flink 架构(二):数据传输
  • Flink 架构(三):事件时间处理
  • Flink 架构(四):状态管理
  • Flink 架构(五):检查点 Checkpoint(看完即懂)
  • Flink 架构(六):保存点 Savepoint

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

Flink 架构(二):数据传输

  • 1.基于信用值的流量控制
  • 2.任务链接

在运行过程中,应用的任务会持续进行数据交换。TaskManager 负责将数据从发送任务传输至接收任务。它的网络模块在记录传输前会先将它们收集到 缓冲区 中。换言之,记录并非逐个发送的,而是在缓冲区中以批次形式发送。该技术是有效利用网络资源、实现高吞吐的基础。它的机制类似于网络以及磁盘 I/O 协议中的缓冲技术。

❗ 请注意,将记录放入缓冲区并不意味着 Flink 的处理模型是基于微批次的。

每个 TaskManager 都有一个用于收发数据的网络缓冲池(每个缓冲默认 32 KB 大小)。如果发送端和接收端的任务运行在不同的 TaskManager 进程中,它们就要用到 操作系统的网络栈 进行通信。流式应用需要以流水线方式交换数据,因此每对 TaskManager 之间都要维护一个或多个永久的 TCP 连接来执行数据交换。 在 Shuffle 连接模式下,每个发送端任务都需要向任意一个接收任务传输数据。对于每一个接收任务,TaskManager 都要提供一个专用的网络缓冲区、用于接收其他任务发来的数据。下图展示了这一架构。

在这里插入图片描述
如上图所示,由于接收端的并行度为 4,所以每个发送端任务至少需要 4 个网络缓冲区来向任一接收端任务发送数据。同理,每个接收端任务也需要至少 4 个缓冲区来接收数据。缓冲区内的数据在向对方 TaskManager 传输时会共享网络连接。为了使流水线式的数据交换平滑进行,TaskManager 必须提供足够多的缓冲区来同时服务所有进出连接。在 Shuffle 或广播连接的情况下,每个发送任务都需要为每个接收任务提供一个缓冲区,因此所需的缓冲区数量可达到相关算子任务数的平方级别。Flink 默认的网络缓冲区配置足以应对中小型使用场景。而对于大型使用场景,后续将会介绍其内容调整配置。

批处理应用除了流水线式通信之外,还可以在发送端收集需要发出的数据。一旦发送端任务完成。所有数据会经由一个到接收端的临时 TCP 连接批量发出。

当发送任务和接收任务处于同一个 TaskManager 进程时,发送任务会将要发送的记录序列化到一个字节缓冲区中。一且该缓冲区占满就会被放到一个队列里。接收任务会从这个队列里获取缓冲区并将其中的记录反序列化。这意味着 同一个 TaskManager 内不同任务之间的数据传输不会涉及网络通信

Flink 采用多种技术来降低任务之间的通信开销。接下来,我们简要讨论一下 基于信用值credit-based)的流量控制以及 任务链接task chaining)。

1.基于信用值的流量控制

通过网络连接逐条发送记录不但低效,还会导致很多额外开销。若想充分利用网络连接带宽,就需要对数据进行缓冲。在流处理环境下,缓冲的一个明显缺点是会增加延迟,因为记录首先要收集到缓冲区中而不会立即发送。

Flink 实现了一个基于信用值的流量控制机制,它的工作原理如下:接收任务会给发送任务授予一定的信用值,其实就是保留一些用来接收它数据的网络缓冲。一旦发送端收到信用通知,就会在 信用值所限定的范围内 尽可能多地传输缓冲数据,并会附带上 积压量(已经填满准备传输的网络缓冲数目)大小。

接收端使用保留的缓冲来处理收到的数据,同时依据各 发送端的积压量信息 来计算所有相连的发送端在下一轮的信用优先级。由于发送端可以在接收端有足够资源时立即传输数据,所以基于信用值的流量控制可以有效降低延迟。此外,信用值的授予是根据各发送端的数据积压量来完成的,因此该机制还能在出现数据倾斜(data skew)时有效地分配网络资源。不难看出,基于信用值的流量控制是 Flink 实现高吞吐低延迟的重要一环。

2.任务链接

Flink 采用一种名为 任务链接 的优化技术来降低某些情况下的 本地通信开销。任务链接的前提条件是,多个算子必须有相同的并行度且通过本地转发通道(local forward channel)相连。下图中算子所组成的流水线就满足上述条件。它包含了 3 个算子,每个算子的任务并行度都为 2 且通过本地转发方式连接。

在这里插入图片描述
下图展示了流水线如何在任务链接模式下执行。多个算子的函数被 “融合” 到同一个任务中,在同一个线程内执行。函数生成的记录只需通过简单的方法调用就可以分别发往各自的下游函数。因此函数之间的记录传输基本上不存在序列化及通信开销。

在这里插入图片描述
单线程执行的链接任务 “融合” 了多个函数,并通过方法调用进行数据传输。

虽然任务链接可以有效地降低本地任务之间的通信开销,但有的流水线应用反而不希望用到它。举例而言,有时候我们需要对过长任务链接进行切分或者将两个计算量大的函数分配到不同的处理槽中。下图展示了相同的流水线在非任务链接模式下执行。其中每个函数都交由单独的任务、在特定线程内处理。

在这里插入图片描述
利用专用线程执行非链接任务并通过缓冲通道及序列化进行数据传输。

Flink 在默认情况下会开启任务链接。后续,我们会展示如何针对某一应用禁用任务链接以及如何单独控制单个算子的行为。

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

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

相关文章

(Aliexpress)速卖通卖家通过自养号补单提高出单率

在跨境电商领域,有些卖家可能会遇到这样的问题:自己的速卖通店铺始终没有订单产生。那么,当速卖通店铺一直不出单时,我们应该如何进行补救呢?今天珑哥将围绕这个问题展开探讨,并分享一些提升速卖通店铺销量…

HCIP复习课(mpls实验)

1、IP配置: R1: R2: R3: R4: R5: R6: R7: R8: 2、rip,ospf配置: R2: R3: R4: R5: R6&#xff1a…

信创联盟--朗思科技加入证券基金行业信息技术应用创新联盟,共促金融信创发展

近期,证券基金行业信息技术应用创新联盟(以下简称:信创联盟)新一批成员单位名单公布,朗思科技LanSive凭借产品创新以及实践案例成功入选,正式成为信创联盟成员单位。 信创联盟由上交所联合行业券商倡议发起…

Threejs 展示——fbx 格式模型导入

文章目录 需求分析 需求 导入fbx 格式的模型数据 分析 需要准备 fbx 格式的数据&#xff0c;如下所示 <template><div id"three-canvas" /> </template> <script> // import { Color, MOUSE, PerspectiveCamera, Scene, WebGLRenderer } …

【LLVM Pass解读】Reassociate 重结合优化

run函数的分析 首先&#xff0c;ReassociatePass是一个FunctionAnalysis&#xff0c;所以其入口函数为 PreservedAnalyses ReassociatePass::run(Function &F, FunctionAnalysisManager &) { 首先对一个函数的基本块构造ReversePostOrderTraversal&#xff0c;该顺序…

canvas自定义扩展示例,新增属性和方法

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

少儿编程 2023年12月电子学会图形化编程等级考试Scratch一级真题解析(判断题)

2023年12月scratch编程等级考试一级真题 判断题(共10题,每题2分,共20分) 26、角色和造型的名称可以更改,但背景的名称不能更改 答案:错 考点分析:角色造型名称和背景名称都可以更改,所以错误 27、点击绿旗后,无论是否按下空格键,声音“Xylo1”都会完整播放完毕,“…

网诺安全文件上传总结

一、文件上传简介 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff08;木马、病毒、恶意脚本、webshell等&#xff09;&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。上传点一般出现在头像、导入数据、上传压缩包等地方&#xff0c;由于程序对用户上传…

自然语言处理中的词云生成

一.词云的介绍 自然语言处理中的词云技术是文本可视化的一种形式&#xff0c;用于展示文本数据中词语的频率分布。以下是词云在自然语言处理中的基本介绍和发展&#xff1a; 起源和发展&#xff1a; 词云的概念最初来源于信息可视化领域&#xff0c;用于将文本中的关键词以视…

64、ubuntu使用c++/python调用alliedvisio工业相机

基本思想&#xff1a;需要使用linux系统调用alliedvisio工业相机完成业务&#xff0c;这里只做驱动相机调用&#xff0c;具体不涉及业务开发 Alvium 相机选型 - Allied Vision 一、先用软件调用一下用于机器视觉和嵌入式视觉的Vimba X 软件开发包 - Allied Vision VimbaX_Set…

Prometheus的相关概念和部署

&#xff08;一&#xff09;Prometheus的相关概念 1、Prometheus&#xff1a;是一个开源的系统监控以及报警系统&#xff0c;整合zabbix的功能、系统、网络、设备 2、Prometheus可以兼容网络、设备&#xff0c;进行容器监控、告警系统 3、因为Prometheus和k8s是一个项目基金…

服务攻防-开发组件安全JacksonFastJson各版本XStreamCVE环境复现

知识点 1、J2EE-组件Jackson-本地demo&CVE&#xff08;数据处理&#xff09; 2、J2EE-组件FastJson-本地demo&CVE&#xff08;数据处理&#xff09; 3、J2EE-组件XStream-本地demo&CVE&#xff08;数据处理&#xff09; 章节点&#xff1a; 1、目标判断-端口扫描…

浅谈桌面云

桌面云是一种通过网络将可伸缩、弹性的共享物理或虚拟资源池按需供应和交付桌面的云服务模式。桌面操作系统运行于共享物理或虚拟资源池&#xff0c;用户可使用瘦客户机端或其他任何与网络相连的设备&#xff08;即终端设备&#xff0c;包括云终端、笔记本、普通PC、智能终端等…

脉宽调制器

1. pwm脉宽调制器 脉宽调制器: 一种硬件设备, 用于 动态调制 方波 的 一些属性, 方波的周期,频率,占空比 占空比? : 有效电平占 整个周期的比值 可以使用PWM 控制功率, 控制频率 用于 开关电源 或 逆变器 1.1 原理 PWM原理: 如图所示 本质就是一个定时器: 由原理…

【玩转Node.JS】=>(内置文件系统)fs模块

文章目录 概念&#xff1a;文件写入writeFile &#xff08;异步写入&#xff09;writeFileSync&#xff08;同步写入&#xff09;appendFile &#xff08;异步追加写入&#xff09;appendFileSync&#xff08;同步追加写入&#xff09;createWriteStream &#xff08;文件流式写…

服务攻防-开发框架安全SpringBootStruts2LaravelThinkPHPCVE复现

知识点&#xff1a; 1、PHP-框架安全-Thinkphp&Laravel 2、J2EE-框架安全-SpringBoot&Struts2 章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&开发框架&am…

Spring Boot通过配置文件支持数据库自定义表名

直接上干货&#xff1a; 例如一个叫xxx的项目&#xff0c;yml文件里加上这段 xxxproject:db:xxxTable: xxx_dbname #自定义的数据库表名创一个Configuration类放表名和Mapper // XxxProjectAutoConfiguration.javaConfiguration MapperScan(basePackages "cn.com.xxxp…

Vue3-插槽(本质也是组件间的交流)

默认插槽 当你在父组件中&#xff0c;有标签需要插入子组件中显示&#xff0c;就需要默认插槽 具名插槽 当你在父组件中&#xff0c;有多个标签需要放置子组件的不同位置时&#xff0c;就需要具名插槽 具名-----》 v-slot:s2 作用域插槽 父组件在插槽中想要使用子组件的值&…

Less-1(sqlmap自动注入攻击)--sqli

环境准备 打开火狐浏览器&#xff0c;进入sqli第一关的页面 工具准备 sqlmap 参数解释 -u URL 指定目标URL进行注入测试。--dataDATA指定POST请求的数据进行注入测试--cookieCOOKIE指定用于身份验证的cookie进行注入测试-p PARAMETER指定要测试的参数--levelLEVEL设置测试的深…

你不知道的Tomcat

Tomcat基本概念 Tomcat是一个Servlet容器&#xff0c;也是一个web容器。我们的请求通过浏览器进入到Tomcat&#xff0c;Tomcat再把请求分发对应的Servlet。 Tomcat核心组件 Connector: 连接器负责处理进入Tomcat的传入连接和请求&#xff0c;然后将它们传递给Server服务对象中…