apache-flink - Apache Flink : What's the difference between side outputs and split() in the DataStream API?

标签 apache-flink flink-streaming

Apache Flink 有一个 split允许分支数据流的 API:

val splited = datastream.split { i => i match {
   case i if ... => Seq("red", "blue")
   case _ => Seq("green")
}}

splited.select("green").flatMap { .... }

它还提供了另一种称为 Side Output( https://ci.apache.org/projects/flink/flink-docs-release-1.5/dev/stream/side_output.html ) 的方法,可以让您做同样的事情!

这两种方式有什么区别?它们是否使用相同的较低级别的构造?它们的成本一样吗?我们应该何时以及如何选择其中之一?

最佳答案

split运算符从早期开始就是 DataStream API 的一部分。稍后添加的侧面输出功能并提供了 split 的超集的功能。
split创建多个相同类型的流,输入类型。侧输出可以是任何类型,即也不同于输入和主输出。

内部,split添加仅拆分流的专用运算符。侧输出在一个运算符(通常是 ProcessFunction 或窗口运算符)中定义,该运算符应用任意逻辑并具有多个输出。我不希望这会导致显着的性能差异。

侧输出的一个常见用例是过滤掉无效(或延迟)记录并将它们未经修改地传递给侧,例如,稍后处理它们。这样的运算符有一个带有所需结果类型的常规输出和一个带有其输入类型的侧输出。使用 split 实现这个逻辑会很麻烦.

关于apache-flink - Apache Flink : What's the difference between side outputs and split() in the DataStream API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51440677/

相关文章:

apache-kafka - 如何在 Kafka 0.10.1.0 中使用 Flink?

java - 通过 Flink REST API 在 AWS EMR 上运行 Flink 作业

hadoop - 有没有办法在 Flink 中以编程方式定义 S3 连接详细信息?

java - Flink : Trigger. onElement 工作

apache-flink - 将 flink uid 命名为 operator 的最佳实践

java - Elasticsearch5.x flink 连接器中的 NoSuchMethodError

scala - 在 Apache Flink 中从输入文件创建对象

java - Flink 函数单元测试

apache-flink - 弗林克 : Sharing state in CoFlatMapFunction

scala - LinkedHashMap 更改为 HashMap 并在 flink 数据流算子中崩溃