roman_日积跬步-终至千里

roman_日积跬步-终至千里

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

 

1. NetworkStack整体架构

通过Netty协议实现的NetworkStack

流程举例:

 

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

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

 

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

 

2. StreamTask内数据流转过程

流式作业中OperatorChain转为StreamTask

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

 

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

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

 

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

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

  1. DataOutput负责将StreamTaskInput接收的数据发送到当前Task实例的OperatorChain的HeadOperator中进行处理。
  1. HeaderOperator接收数据,算子开始接收数据并进行处理
  1. 上一个算子处理的数据会通过Output组件发送到下一个算子中继续处理
  1. RecordWriterOutput中RecordWriter组件将数据发送到网络

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

 

02-24 06:26