【Flink数据传输(一)】NetworkStack架构概述:实现tm之间的数据交换

这篇具有很好参考价值的文章主要介绍了【Flink数据传输(一)】NetworkStack架构概述:实现tm之间的数据交换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

NetworkStack提供了高效的网络I/O和反压控制

除了各个组件之间进行RPC通信之外,在Flink集群中TaskManager和TaskManager节点之间也会发生数据交换,尤其当用户提交的作业涉及Task实例运行在不同的TaskManager上时。Task实例之间的数据交换主要借助Flink中的NetworkStack实现。NetworkStack不仅提供了非常高效的网络I/O,也提供了非常灵活的反压控制。

 文章来源地址https://www.toymoban.com/news/detail-843119.html

1. NetworkStack整体架构

通过Netty协议实现的NetworkStack

Flink NetworkStack整体架构在不同的TaskManager之间建立TCP连接,而TCP连接则主要依赖Netty通信框架实现。Netty是一个NIO网络编程框架,可以快速开发高性能、高可靠性的网络服务器/客户端程序,能够极大简化TCP和UDP等网络编程。

流程举例:

TaskManager中会运行多个Task实例,例如在TaskManager 1中运行了Task A-1和Task A-2,在TaskManager 2中运行了Task B-1和Task B-2,Task A中从外部接入数据并处理后,会通过基于Netty构建的TCP连接发送到Task B中继续进行处理。整个数据传输过程主要基于Flink的NetworkStack框架进行。

 

上游数据流转逻辑:二进制buffer->ResultSubPartition队列->InputChannel

对于上游的Task A实例来讲,经过Operator处理后的数据,最终会通过RecordWriter组件写入网络栈,即算子输出的数据并不是直接写入网络,而是先将数据元素转换为二级制Buffer数据,并将Buffer缓存在ResultSubPartition队列中,接着写入下游Task对应的InputChannel。在上游的Task中会创建LocalBufferPool为数据元素申请对应Buffer的存储空间,且上游的Task会创建NettyServer作为网络连接服务端,并与下游Task内部的NettyClient之间建立网络连接。

 
【Flink数据传输(一)】NetworkStack架构概述:实现tm之间的数据交换,# flink源码,flink,架构,大数据

 

下游Task数据接收逻辑:InputGate的InputChannel接收->StreamTaskInput取数据并处理(反序列化)->OperatorChain

  • 对下游的Task实例来讲,会通过InputGate组件接收上游Task发送的数据,在InputGate中包含了多个InputChannel。InputChannel实际上是将Netty中Channel进行封装,数量取决于Task的并行度
  • 上游Task的ResultPartition会根据ChannelSelector选择需要将数据下发到哪一个InputChannel中,其实现类似Shuffe的数据洗牌操作
  • 在下游的Task实例中可以看出,InputGate中接收到的二进制数据,会转换为Buffer数据结构并存储到本地的Buffer队列中,最后被StreamTaskInput不断地从队列中拉取出来并处理。StreamTaskInput会将Buffer数据进行反序列化操作,将Buffer数据转换为StreamRecord并发送到OperatorChain中继续处理。

 

2. StreamTask内数据流转过程

流式作业中OperatorChain转为StreamTask

在ExecutionGraph调度和执行ExecutionVertex节点的过程中,会将OperatorChain提交到同一个Task实例中运行。如果被调度的作业为流式类型,则AbstractInvokable的实现类就为StreamTask。最终StreamTask会被TaskManager中的Task线程触发执行。

根据数据源不同,StreamTask分为两种类型:

  1. 直接从外部源数据读取数据的SourceStreamTask和SourceReaderStreamTask;
  2. 支持从网络或本地获取数据的OneInputStreamTask和TwoInputStreamTask;

 

以OneInputStreamTask为例,分析从Task层面介绍数据从网络接入并发送到OperatorChain中进行处理,接着通过Output组建输出到下游网络中的过程。

【Flink数据传输(一)】NetworkStack架构概述:实现tm之间的数据交换,# flink源码,flink,架构,大数据

 

OneInputStreamTask包含一个StreamInputProcessor,用于对输入数据进行处理和输出。在StreamInputProcessor组件中包含StreamTaskInput、OperatorChain以及DataOutput三个组成部分。

 
task内部数据流转:StreamTaskNetworkIutput -> StreamTaskNetworkOutput -> OperatorChain中的HeaderOperator -> task实例算子->Output->下游算子...->RecordWriter->网络。详细过程如下:

  1. StreamTaskInput从Task外部获取数据。

根据不同的数据来源,StreamTaskInput的实现主要分为从网络获取数据的StreamTaskNetworkInput和从外部系统获取数据的StreamTaskSourceInput。

  1. DataOutput负责将StreamTaskInput接收的数据发送到当前Task实例的OperatorChain的HeadOperator中进行处理。

DataOutput主要有StreamTaskNetworkOutput(用于处理StreamTaskNetworkInput接收的数据)和StreamTaskSourceOutput(用于处理StreamTaskSourceInput接收的数据)两种实现。

  1. HeaderOperator接收数据,算子开始接收数据并进行处理

OperatorChain负责将能够运行在同一个Task实例中的Operator连接起来,然后形成算子链,且算子链中HeaderOperator会暴露给StreamTask。当StreamTaskNetworkIutput接收到网络数据后,就会通过StreamTaskNetworkOutput组件将数据元素发送给OperatorChain中的HeaderOperator进行处理,此时Task实例中的算子就能够接收数据并进行处理了。

  1. 上一个算子处理的数据会通过Output组件发送到下一个算子中继续处理
  1. 在OperatorChain中,除了具有HeaderOperator之外,还包含了其他算子,这些算子会按照拓扑关系连接到HeaderOperator之后,每个算子之间的数据传输通过Output组件相连,即在OperatorChain中,上一个算子处理的数据会通过Output组件发送到下一个算子中继续处理。注意:DataOutput强调的是从外部接入数据到Task实例后再转发到HeaderOperator中,Output则更加强调算子链内部的数据传递。
  2. Output组件的实现主要有ChainingOutput、BroadcastingOutputCollector、DirectedOutput和RecordWriterOutput等类型,它们最大的区别在于数据下发的方式不同,例如ChainingOutput代表直接向下游算子推送数据。
  1. RecordWriterOutput中RecordWriter组件将数据发送到网络

经过算子链处理后的数据,需要发送到网络中供下游的Task实例继续处理,此时需要通过RecordWriterOutput完成数据的网络输出。RecordWriterOutput中包含了RecordWriter组件,用于将数据输出到网络中,下游Task实例就能通过StreamTaskInput组件从网络中获取数据,并继续传递到Task内部的算子链进行处理。

小结:
在StreamTask中接入数据,然后通过OperatorChain进行处理,再通过RecordWriterOutput发送到网络中,下游Task节点则继续从网络中获取数据并继续处理,最后组合这些Task节点就形成了整个Flink作业的计算拓扑。

注意:Task节点的数据输入也可以是本地类型,这种情况主要出现在Task实例被执行在同一台TaskManager时,数据不需要经过网络传输。

 

到了这里,关于【Flink数据传输(一)】NetworkStack架构概述:实现tm之间的数据交换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android实现与PHP后端的交互(数据传输,文件传输)(超详细/附源码)

    为方便大家浏览,源码先行奉上 github源码链接 https://github.com/Recycle1/Android-connect-PHP csdn源码链接 https://download.csdn.net/download/weixin_52263647/87751491 在Android开发中,经常涉及与服务器端交互的过程,在现在的APP制作中,经常利用互联网通信,从云端获取图片,数据等信息,本篇文

    2024年01月19日
    浏览(36)
  • 手机如何实现边充电边传输数据?

    日常我们在手机连接电脑或者U盘传输数据的时候,虽然都是传输数据,但是主从关系是不同的,在手机连接电脑的时候可以同时给手机充电,而连接U盘的时候是手机提供电力给U盘,造成这种区别到底是由什么控制呢?   首先我们要知道数据和供电是两个角色,数据和供电都

    2024年02月09日
    浏览(44)
  • 物联网安全:实现数据传输安全的关键技术

    物联网(Internet of Things, IoT)是指通过互联网将物体和日常生活中的各种设备(如传感器、电子标签、智能手机、电子产品等)互联互通,实现人机交互、物物交互和人物交互的大规模网络。随着物联网技术的发展,物联网设备的数量日益增加,这些设备在各个行业中扮演着越来越

    2024年02月19日
    浏览(44)
  • Unity Render Streaming实现自定义数据传输

    Uinity Render Streaming中已有的脚本实现了Video和Audio的收发和InputSystem相关事件的收发,那么如何简单的实现自定义的数据收发呢?(本文实现的是Unity端到Unity端的数据收发) 关于Unity Render Streaming包,其自身提供了与信令服务器建立连接的基础件脚本RenderStreaming.cs,还提供了一

    2024年02月07日
    浏览(51)
  • 前后端数据加密传输(附go语言实现)

    一般的对外服务都是需要服务器支持 https 传输的,那既然有了 https ,数据已经加密了,为什么还要做这个事情呢? 现在大多数应用服务都是使用的前后端分离的方式来开发的,以后端提供的接口来进行业务数据交互。相信有过 web 开发经验的都打开过浏览器的调试控制台,

    2024年02月08日
    浏览(43)
  • 【Verilog】握手信号实现跨时钟域数据传输-handshake

    handshake握手电路 跨时钟域处理是个很庞大并且在设计中很常出现的问题 握手(handshake)是用来处理信号跨时钟域传递的一个有效的方法 使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req和ack)分别使用脉冲检测方法进行同步 req与ack就和TCP传输之前的三次

    2024年02月05日
    浏览(37)
  • C# 使用FTP上传文件、下载文件,实现数据传输

    上传文件的方法调用: 下载文件方法:

    2024年02月14日
    浏览(45)
  • QT下TCP协议实现数据网络传输

    QT开发框架以其跨平台的优势,在全世界IT界如雷贯耳。其封装了功能齐全的各种类,大大的提高了开发者的效率。本篇内容将介绍如何使用QT 6.4.1框架开发服务器和客户端程序,让两端能够首发消息,服务端往客户端发送文件(客户端往服务器发送类似,没有实现)。  说明

    2023年04月08日
    浏览(45)
  • 「Verilog学习笔记」使用握手信号实现跨时钟域数据传输

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

    2024年02月04日
    浏览(45)
  • 实现注册登录时数据的加密传输(含前后端具体代码)

    http/https协议提交在被抓包时请求内容是明文的, 直接传输账号密码的风险非常大,故这里我们要对数据加密处理,并生成校验码,防止数据篡改 Http/https传输账户密码等数据时需要加密处理的原因主要有以下几点: 数据保密性 :账户密码等敏感信息是用户的私密数据,如果明

    2024年01月20日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包