- Fold
Fold与Reduce类似,区别在于Fold是一个提供了初始值的Reduce,用初始值进行合并运算。该类运算应用在KeyedStream上,输出结果为DataStream。Folder接口对应的是FoldFunction,其类泛型为FoldFunction<O,T>,O为KeyStream中的数据类型,T为初始值类型和Fold方法返回值类型。
FoldFunction<O,T>已经被标记为Deprecated废弃,替代接口是AggregateFunction<IN,ACC,OUT>。
- Aggregation
渐进聚合具有相同Key的数据流元素,以min和minBy为例,min返回的是整个KeyedStream的最小值,按照Key进行分组,返回每个组的最小值。聚合运算输出结果为DataStream。
- Window
对KeyedStream数据,按照Key进行时间窗口切分。输出结果为WindowedStream。输出结果的类泛型为<T,K,W extends Window>,T为KeyedStream中的元素数据类型,K为指定Key的数据类型,W为窗口类型。
- WindowAll
对一般的DataStream进行窗口切分,即全局一个窗口。输出结果为AllWindowedStream。
注意:在一般的DataStream上进行窗口切分,往往会导致无法并行计算,所有的数据都集中在WindowAll算子的一个Task上。
- Window Apply
将Window函数应用到窗口上,Window函数将一个窗口的数据作为整体进行处理。Window Stream有两种:分组后的WindowedStream和未分组的AllWindowedStream。
1、WindowedStream
WindowedStream上应用的是WindowFunction,输出结果为DataStream。WindowFunction<IN,OUT,KEY,W extends Window>中IN表示输入值的类型,OUT表示输出值的类型,KEY表示Key的类型,W表示窗口的类型。
2、AllWindowedStream
AllWindowedStream上应用的是AllWindowFunction,输出结果为DataStream。AllWindowFunction<IN,OUT,KEY,W extends Window>中IN表示输入值的类型,OUT表示输出值的类型,KEY表示Key的类型,W表示窗口的类型。
- Window Reduce
在WindowedStream上应用ReduceFunction,结果输出为DataStream。
- Window Fold
在WindowedStream上应用FoldFunction,结果输出为DataStream。
- Window Aggregation
统计聚合运算,在WindowedStream应用该运算,应用AggregationFunction,输出结果为DataStream。
- Union
把两个或多个DataStream合并,所有DataStream中的元素都会组合成一个新的DataStream,但是不去重,如果在自身上应用Union运算,则每个元素在新的DataStram出现两次。
- Window Join
在相同时间范围的窗口上Join两个DataStream数据流,输出结果为DataStream。Join核心逻辑在JoinFunction<IN1,IN2,OUT>中实现,IN1为第一个DataStream中的数据类型,IN2为第二个DataStream中的数据类型,OUT为Join结果的数据类型。
- Interval Join
对两次KeyedStream进行Join,需要指定时间范围和Join时使用的Key,输出结果为DataStream。Join的核心逻辑在ProcessJoinFunction<IN1,IN2,OUT>中实现,IN1为第一个DataStream中的元素数据类型,IN2为第2个DataStream中的元素数据类型,OUT为结果输出类型。
- WindowCoGroup
两个DataStream在相同时间窗口上应用CoGroup运算,输出结果为DataStream,CoGroup和Join功能类似,CoGroup接口对应的是CoGroupFunction,其类泛型为CoGroupFunction<IN1,IN2,O>,IN1代表第一个DataStream中是元素类型,IN2代表第二个DataStream中是元素类型,O为输出结果类型。
- CoMap和CoFlatMap
在ConnectedStream上应用Map和FlatMap运算,输出流为DataStream。其基本逻辑类似于在一般DataStream上的Map和FlatMap运算,区别在于CoMap转换有2个输入,Map转换有1个输入,CoFlatMap同理。
- Split
将DataStream按照条件切分多个DataStream,输出流为SplitDataStream。该方法已经标记为废弃,推荐使用SideOutput。
- Select
Select与Split运算配合使用,在Split运算中切分的多个DataStream中,Select用来选择其中某一个具体的DataStream。
- Iterate
在API层面上,对DataStream应用迭代会生成1个IteractiveStream,然后在IteractiveSteram应用业务处理逻辑,最终生成一个新的DataStream,在数据流中创建一个迭代循环,将下游的输出发送给上游重新处理。
- Extract Timestamps
从记录中提取时间戳,并生成WaterMark。该类运算不会改变DataStram。
- Project
该类运算只适用于Tuple类型的DataStream,使用Project选取子Tuple,可以选择Tuple的部分元素,可以改变元素顺序,类似于SQL语句中的Select子句,输出流仍然是DataStream。
4.3 旁路输出
旁路输出在Flink中叫做SideOutput,类似于DataStream#split,本质上是一个数据流的切分行为,按照条件将DataStream切分为多个子数据流,子数据流叫做旁路输出数据流。每个旁路输出数据流可以有自己的下游处理逻辑。
旁路输出数据流的数据类型可以与上游数据流不同,多个旁路输出数据流的数据类型也不必相同。
如何使用旁路输出:
1、定义OutputTag,OutpuTag是每一个下游分支的标识。
2、获取旁路输出
接下来Flink核心篇,如果对Flink感兴趣或者正在使用的小伙伴,可以加我入群一起探讨学习。