我仍在苦苦思考 flink 如何在不同运营商之间“交换/传输”数据,以及运营商之间的实际数据会发生什么。
以上面的 DAG 为例: 执行的 DAG
DataSet 被转发/传输到 GroupReduce Operator 的所有并行实例,Data 根据 GroupReduce 转换得到缩减。
所有新数据都被转发到 Filter->Map->Map Operand,即 GroupReduce 运算符的并行实例之一消耗的所有数据都被转移到 Filter->Map->Map 运算符的一个实例(不需要用于序列化/反序列化,因此 Operator 访问由 GroupReduce Operator 生成的数据)
所有GroupReduces 输出数据都经过哈希处理,并在 (Filter->Map) 运算符的所有并行实例之间均匀分布/传输(运算符之间需要序列化/反序列化)
因此,例如,如果 GroupReduce Operators 输出大约为 100MB,它会将 100MB 转发到 (Filter->Map->Map) 操作数,然后散列该 100MB 的副本并将其传输到 (Filter->Map) 实例。所以我会再产生 100MB 的网络流量
我很困惑为什么在 GroupReduce 之后和过滤步骤之前有这么多网络流量。在将现在减少的数据发送给后续操作员之前将 GroupRedcue 和 Filter 步骤链接在一起会更好吗?