Flink DataStream 侧输出流 Side Output

Posted @SmartSi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink DataStream 侧输出流 Side Output相关的知识,希望对你有一定的参考价值。

传送门:Flink 系统性学习笔记


Flink 1.13.5

大多数 DataStream API 都只有一个输出,即只能生成一条某种数据类型的结果流。之前版本只有 Split 算子可以将一条流拆成多条类型相同的流,由于性能和逻辑的问题在 Flink 1.12.0 被删除。官方提供的推荐方案是使用处理函数提供的侧输出 Side Output 实现同一个函数输出多条数据流。

Side Output 除了生成主数据流之外,还可以额外生成任意数量的侧输出流。侧输出流中的数据类型不必与主数据流中的数据类型相匹配,并且不同侧输出流的类型也可以不同。当我们想要分割数据流时,此操作非常有用,否则我们只能复制数据流,然后从每个流中过滤掉我们不希望的数据。

Side Output 不只是可以用来拆分数据流,还可以在窗口计算时处理延迟数据。使用 Side Output 将迟到的数据重定向到另一个数据流中,这样就可以对他们进行后续处理或者通过 Sink 将数据输出到外部系统。后续会在如何处理窗口中迟到数据时具体讲解。

要使用 Side Output 的话,你首先需要做的是定义一个 OutputTag 来标识 Side Output,表示是要收集哪种类型的数据。如果是要收集多种类型的数据,那么就需要定义多种 OutputTag。例如我们要将整数数据流拆分偶数流和奇数流,那么就需要定义2个 Out

以上是关于Flink DataStream 侧输出流 Side Output的主要内容,如果未能解决你的问题,请参考以下文章

flink的神奇分流器-sideoutput

Flink 侧输出流 SideOutput

Flink 侧输出流 SideOutput

大数据(9e)Flink侧输出流

大数据(9e)Flink侧输出流

Apache Flink——侧输出流(side output)