NetworkStack提供了高效的网络I/O和反压控制
1. NetworkStack整体架构
通过Netty协议实现的NetworkStack
流程举例:
上游数据流转逻辑:二进制buffer->ResultSubPartition队列->InputChannel
下游Task数据接收逻辑:InputGate的InputChannel接收->StreamTaskInput取数据并处理(反序列化)->OperatorChain
2. StreamTask内数据流转过程
流式作业中OperatorChain转为StreamTask
根据数据源不同,StreamTask分为两种类型:
以OneInputStreamTask为例,分析从Task层面介绍数据从网络接入并发送到OperatorChain中进行处理,接着通过Output组建输出到下游网络中的过程。
OneInputStreamTask包含一个StreamInputProcessor,用于对输入数据进行处理和输出。在StreamInputProcessor组件中包含StreamTaskInput、OperatorChain以及DataOutput三个组成部分。
task内部数据流转:StreamTaskNetworkIutput -> StreamTaskNetworkOutput -> OperatorChain中的HeaderOperator -> task实例算子->Output->下游算子...->RecordWriter->网络
。详细过程如下:
- DataOutput负责将StreamTaskInput接收的数据
发送到当前Task实例的OperatorChain的HeadOperator
中进行处理。
- HeaderOperator接收数据,算子开始接收数据并进行处理
- 上一个算子处理的数据会通过Output组件发送到下一个算子中继续处理
- RecordWriterOutput中RecordWriter组件将数据发送到网络
小结:
在StreamTask中接入数据,然后通过OperatorChain进行处理,再通过RecordWriterOutput发送到网络中,下游Task节点则继续从网络中获取数据并继续处理,最后组合这些Task节点就形成了整个Flink作业的计算拓扑。