【译】A Deep-Dive into Flink's Network Stack(2)

原文链接: https://my.oschina.net/u/1262062/blog/3060930

本篇翻译接上一篇

对于下图所示的示例,我们将假设4的并行性和具有两个任务管理器的部署,每个任务管理器提供2个插槽。 TaskManager 1执行子任务A.1,A.2,B.1和B.2,TaskManager 2执行子任务A.3,A.4,B.3和B.4。 在任务A和任务B之间的随机类型连接中,例如从keyBy(),在每个TaskManager上有2x4个逻辑连接,其中一些是本地的,一些是远程的:

【译】A Deep-Dive into Flink's Network Stack(2)_第1张图片

不同任务之间的每个(远程)网络连接将在Flink的网络堆栈中获得自己的TCP通道。 但是,如果同一任务的不同子任务被安排到同一个TaskManager,则它们与同一个TaskManager的网络连接将被多路复用并共享一个TCP信道以减少资源使用。 在我们的例子中,这适用于A.1→B.3,A.1→B.4,以及A.2→B.3和A.2→B.4,如下图所示:

【译】A Deep-Dive into Flink's Network Stack(2)_第2张图片

每个子任务的结果称为ResultPartition,每个子结果分成单独的ResultSubpartitions  - 每个逻辑通道一个。 在堆栈的这一点上,Flink不再处理单个记录,而是将一组序列化记录组装到网络缓冲区中。 每个子任务可用于其自己的本地缓冲池中的缓冲区数量(每个发送方和接收方各一个)最多限制为一个

#channels * buffers-per-channel + floating-buffers-per-gate

 

转载于:https://my.oschina.net/u/1262062/blog/3060930

你可能感兴趣的:(【译】A Deep-Dive into Flink's Network Stack(2))