Rez*_*'ei 7 apache-flink flink-streaming
Apache Flink有一个splitAPI,可用于分支数据流:
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。
| 归档时间: | 
 | 
| 查看次数: | 1022 次 | 
| 最近记录: |