由Akka 构建的 RPC通讯,Dispatcher,JobMaster、ResourceManager等都继承了RpcEndpoint。RpcServer接口通过AkkaInvocationHandler动态代理类实现。TaskManager之间通过Netty 做通讯,RecordWriter先写到本地buffer,在根据选择输出到ResultPartition,最后发送到netty-server,对端的netty-client接收后,转发给 InputGate–>OperatorChain 的 head 算子,再转给StreamTaskInput(同样也有local buffer)。直接从外部源数据读取数据的SourceStreamTask和SourceReaderStreamTask、支持从网络或本地获取数据的OneInputStreamTask和TwoInputStreamTask。ResultPartition:实际上是ExecutionGraph 中 IntermediateResultPartition 对应的底层物理实现,含多个 ResultSubPartiton 实例。PipelinedResultPartition(类似presto)、BoundedBlockingResultPartition(类似spark)、HsResultPartition (Hybrid Shuffle)、SortMergeResultPartition、BufferWritingResultPartition。ConnectorManager 和 NettyConnectionManager。基于信用的反压机制,每个 creadit 表示一个上游的 buffer(默认 32KB)
阅读全文