0

我试图了解 Flinks Collector.collect() 的作用以及它如何处理传入/传出数据:

取自 Flink DataSet API 的示例:

以下代码将文本行的 DataSet 转换为单词的 DataSet:


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);
    }
  }
}

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

4

1 回答 1

0

来自官方源代码文档

收集记录并转发。收集器是 {@link java.util.Iterator} 的“推”对应物,它“拉”数据。

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

于 2020-11-04T15:36:52.310 回答