Flink学习 - 10. Flink Side Output 侧输出
Side Output概念
Side Output简单来说就是在你程序执行过程中,你需要将从主流stream中获取额外的流的方式,也就是在处理一个数据流的时候,将这个流中的不同的业务类型或者不同条件的数据分别输出到不同的地方。
如果采用filter算子对数据做筛选,也可以满足这种需求,但是这样会造成数据流被复制多分,造成不必要的性能浪费。
Side Output在拆分数据流时,然后从每个流过滤出你不想拥有的数据,非常有用。
摘自 : Flink的处理机制以及侧输出应用
通常我们说sideoutput的使用场景如下:
- 分流 : 使用split函数
- 异常值捕获(空值,字段缺失,异常值过大等场景),滞后的数据处理等 : 使用sideoutput
举个例子来说明:
比如现在有一篇文章吧,单词长度不一,但是我们想对单词长度小于5的单词进行wordcount操作,同时又想记录下来哪些单词的长度大于了5,那么我们该如何做呢?
普遍的做法是:
datastream.filter(word.length>=5); //获取不统计的单词,也即是单词长度大于等于5。
datastream.filter(word.length <5);// 获取需要进行wordcount的单词。
这样数据,然后每次筛选都要保留整个流,然后