画布 1
获取ShuffleBlock的流程
  ExternalShuffleService/YarnShuffleService
    server: TransportServer
      TransportChannelHandler
        TransportRequestHandler（请求处理）
          processRpcRequest
            ExternalShuffleBlockHandler#receive方法
              OpenBlocks请求
                OneForOneStreamManager#registerStream
                RpcResponseCallback
                  onSuccess
                    返回StreamHandle
                  onFailure
          processStreamRequest
            OneForOneStreamManager#openStream
          processOneWayMessage
          processFetchRequest
            OneForOneStreamManager#getChunk
              ManagedBufferIterator#next
                ExternalShuffleBlockResolver#getBlockData
  ShuffleBlockFetcherIterator
    fetchRemoteBlock
      shuffleClient（是否开启shuffle service）
        ExternalShuffleClient
          OneForOneBlockFetcher
            1. 发送RPC OpenBlocks
            2. 获取返回结果StreamHandle
            3. 挨个请求每一个block
              - 落盘 StreamRequest
              - 内存 ChunkRequest
              BlockFetchingListener#onBlockFetchSuccess
        BlockTransferService（NettyBlockTransferService）
          client
            fetchBlocks
          server
            NettyBlockRpcServer#receive
              BlockManager.getBlockData
                IndexShuffleBlockResolver#getBlockData
    fetchLocalBlock
      BlockManager.getBlockData
        IndexShuffleBlockResolver#getBlockData