Flink消息消费流程
简介
准备一个ResultPartition;
通知JobMaster;
JobMaster通知下游节点;如果下游节点尚未部署,则部署之;
下游节点向上游请求数据
开始传输数据
数据跨 task 传输
数据在本operator处理完后,交给RecordWriter。每条记录都要选择一个下游节点,所以要经过ChannelSelector。
每个channel都有一个serializer(我认为这应该是为了避免多线程写的麻烦),把这条Record序列化为ByteBuffer
接下来数据被写入ResultPartition下的各个subPartition里,此时该数据已经存入DirectBuffer(MemorySegment)
单独的线程控制数据的flush速度,一旦触发flush,则通过Netty的nio通道向对端写入
对端的netty client接收到数据,decode出来,把数据拷贝到buffer里,然后通知InputChannel
有可用的数据时,下游算子从阻塞醒来,从InputChannel取出buffer,再解序列化成record,交给算子执行用户代码