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.
因此,它接收一个值并将一个或多个值存储到迭代器中。然后推送给下一个操作员。但这是网络堆栈/缓冲区的问题。
我想了解 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.
因此,它接收一个值并将一个或多个值存储到迭代器中。然后推送给下一个操作员。但这是网络堆栈/缓冲区的问题。