Flink从较新的版本之后,API分为四层:
1、SQL
2、TABLE API
3、DataSet/DataStream API
4、Stateful Stream Porcessing
这四层API从上往下,越往下,越底层,使用复杂度越高,但是功能更强大。
ProcessFunction简单来说是提供了更丰富、更强大的API的函数类,是一个低阶流处理算子函数,位于四层API的第四层,可以访问流应用程序所有基本构建块:
• 事件(数据流元素)
• 状态(容错和一致性)
• 定时器(事件时间和处理时间)
Flink提供了8个Process Function:
ProcessFunction
KeyedProcessFunction
CoProcessFunction
ProcessJoinFunction
BroadcastProcessFunction
KeyedBroadcastProcessFunction
ProcessWindowFunction
ProcessAllWindowFunction
在ProcessFunction中定义了两个方法:
ProcessFunction<I, O> {
public abstract void processElement(I value, Context ctx, Collector<O> out) throws Exception;
public void onTimer(long timestamp, OnTimerContext ctx, Collector<O> out) throws Exception {}
}
ProcessFunction又继承了AbstractRichFunction,其具备了RuntimeContext,能够获取上下文。
使用方法例如:
DataStream<Tuple2<String, String>> stream = ...;
DataStream<Tuple2<String, Long>> result = stream
.keyBy(value -> value.f0)
.process(new CountWithTimeoutFunction());
我们接下来看一下的后续章节来看一下常用的ProcessFunction的使用方法。