【大数据】Flink 中的数据传输

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

活字格V9获取图片失败bug,报错404,了解存储路径,已改为批量上传和批量获取

项目场景: 问题描述 原因分析: 解决方案: 完成了批量上传功能,这插件真的很方便 于是写了个批量获取附件的js代码,我真厉害 项目场景: 活字格V9版本获取图片链接Upload 【9.0.103.0】图片上传的存储路…

java web 研究生信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web研究生信息管理系统是一套完善的java web信息管理系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发,数据库为My…

Keycloak - docker 运行 前端集成

Keycloak - docker 运行 & 前端集成 这里的记录主要是跟我们的项目相关的一些本地运行/测试,云端用的 keycloak 版本不一样,不过本地我能找到的最简单的配置是这样的 docker 配置 & 运行 keycloak keycloak 有官方(Red Hat Inc.)的镜像&#…

助力工业产品质检,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建智能PCB电路板质检分析系统

AI助力工业质检智能生产制造已经有很多成功的实践应用了,在我们前面的系列博文中也有很多对应的实践,感兴趣的话可以自行移步阅读前面的博文即可: 《助力质量生产,基于目标检测模型MobileNetV2-YOLOv3-Lite实现PCB电路板缺陷检测…

python:socket基础操作(4)-《tcp客户端基础》

tcp就和udp不一样了,tcp是客户端和服务器端,如果想通过tcp发送数据,要先让tcp进行连接服务器端 tcp客户端 先让服务器端进行启动 import socketdef main():# 创建套接字tcp_client_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM…

【原理图PCB专题】OrCAD Capture CIS关闭开始界面

17.4版本 在打开OrCAD Capture CIS时会发现打开Start Page页面,那么如何将他关闭再也不看这个界面呢? 在窗口中输入SetOptionBool EnableStartPage 0 回车 重启软件后就再也不会弹出Start Page页面 如果没有发现Command Window那么将菜单栏view->C…

Cesium绘制流动管线

目录 一、第一种方式 二、第二种方式 1.安装gsap 2.引入 一、第一种方式 使用viewer.clock Clock文档 viewer.clock文档 vec4 colorImage texture2D(image, vec2(fract(st.s - time), st.t));这里,因为使用的是高版本的cesium1.108,直接写texture2D会报错&am…

计数指针:shared_ptr (共享指针)与函数 笔记

推荐B站视频: 4.shared_ptr计数指针_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p4&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 5.shared_ptr与函数_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p5&vd_sourcea…

JavaScript基础之输入输出与变量常量详解

输入和输出 输出和输入也可理解为人和计算机的交互,用户通过键盘、鼠标等向计算机输入信息,计算机处理后再展示结果给用户,这便是一次输入和输出的过程。 举例说明:如按键盘上的方向键,向上/下键可以滚动页面&#x…

C语言实现插入排序算法(附带源代码)

插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常…

opencv012 滤波器04 中值滤波,双边滤波

中值滤波 取中位数,可以处理椒盐噪音 CV自带medianBlur函数dst cv2.medianBlur(src, ksize) 参数说明:1.src: 需要滤波的图片;2.ksize:核大小,必须是比1大的奇数【举个例子:3,5,7……

【RT-DETR有效改进】 | 主干篇 | RevColV1可逆列网络(特征解耦助力小目标检测)

前言 大家好,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持ResNet32、ResNet101和PP…

JDBC(Java DataBase Connectivity )

图片来源:动力节点老杜的JDBC视频讲解 JDBC(Java DataBase Connectivity ) 一、JDBC 的本质二、开始前的准备工作三、关于 JDBC 中的事务四、JDBC 编程六步1.注册驱动2.获取连接3.获取数据库操作对象4.执行SQL语句5.处理结果查询集6.释放资源…

SpringBoot_基础

学习目标 基于SpringBoot框架的程序开发步骤 熟练使用SpringBoot配置信息修改服务器配置 基于SpringBoot的完成SSM整合项目开发 一、SpringBoot简介 1. 入门案例 问题导入 SpringMVC的HelloWord程序大家还记得吗? SpringBoot是由Pivotal团队提供的全新框架&…

docker指令存档

目录 Docker 1、概念 2、架构图 3、安装 4、Docker怎么工作的? 5、Docker常用命令 帮助命令 镜像命令 1、查看镜像 2、帮助命令 3、搜索镜像 4、拉取镜像 5、删除镜像 容器命令 1、启动 2、查看运行的容器 3、删除容器 4、启动&停止 其他命令…

苹果Find My市场需求火爆,伦茨科技ST17H6x芯片助力客户量产

苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch,如今的Find My已经不单单可以查找苹果的设备,随着第三方设备的加入,将丰富Find My Network的版图。产…

蓝桥杯备战——3.定时器前后台

1.STC15F2k61S2的定时器 阅读STC15系列的手册,我们可以看到跟STC89C52RC的定时器还是有不同之处的: 由上图可以看到我们可以通过AUXR寄存器直接设置定时器的1T/12T模式了 在定时器0/1模式上也可以设置为16位自动重装载。 另外需要注意IAP15F2K61S2只有…

python 学习之 re库的基本使用(正则匹配)上

目录 一、基本用法 二、函数介绍 1、match函数 2、search 函数 3、compile 函数 4、findall 和 finditer 函数 5、sub 函数和 subn 函数 6、split 函数 一、基本用法 首先我们需要引入 re 库 代码基本框架使用两行代码实现 测试代码: import reret re.m…

Linux管道学习(无名管道)

目录 1、概述 2、管道的创建 3、管道读写行为 3.1、管道读 在linux中管道有两种,一是无名管道(匿名管道),第二种是有名管道;无名管道主要用于有血缘关系的父子进程间通信,有名管道则不受该限制&#xf…

描绘未知:数据缺乏场景的缺陷检测方案

了解更多方案内容,欢迎您访问官网:neuro-T | 友思特 机器视觉 光电检测;或联系销售经理:18124130753 导读: 深度学习模型帮助工业生产实现更加精确的缺陷检测,但其准确性可能受制于数据样本的数量。友思特…