Flink从入门到实战七[ProcessFunction]-1-ProcessFunction是什么

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的使用方法。