Flinks Collector.collect() 是如何处理数据的?

How does Flinks Collector.collect() handle data?

我想了解 Flinks Collector.collect() 的作用以及它如何处理 incoming/outgoing 数据:

示例取自 Flink DataSet API:

以下代码将文本行数据集转换为单词数据集:


DataSet<String> output = input.flatMap(new Tokenizer());

public class Tokenizer implements FlatMapFunction<String, String> {
  @Override
  public void flatMap(String value, Collector<String> out) {
    for (String token : value.split("\W")) {
      out.collect(token);
    }
  }
}

所以文本行被分割成标记,每个标记都被“收集”。听起来很直观,但我错过了 Collector.collect() 背后的实际动态。收集的数据在分配给输出之前存储在哪里,即 Flink 是否将它们放在某种缓冲区中?如果是,数据是如何传输到网络的?

来自官方source code documentation.

Collects a record and forwards it. The collector is the "push" counterpart of the {@link java.util.Iterator}, which "pulls" data in.

因此,它接收一个值并将一个或多个值存储到迭代器中。然后推送给下一个操作员。但这是网络堆栈/缓冲区的问题。