Flink 基础-ProcessFunction API(第七章)

wiki

底层 API ,可以访问时间戳、watermark以及注册定时事件,还可以输出一些特殊事件,例如超时事件。

分类

  • ProcessFunction
  • KeyedProcessFunction
  • CoProcessFunction
  • ProcessJoinFunction
  • BroadcastProcessFunction
  • KeyedBroadcastProcessFunction
  • ProcessWindowFunction
  • ProcessAllWindowFunction

KeyedProcessFunction

1. 上下文方法(Context ctx)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* K:分组的键类型
* I:输入数据类型
* O:输出数据类型
*/
public static class MyPeocessFunction ecxtends KeyedProcessFunction<K, I, O> {

@override
public void processElement(I, Context, Collector<O>) {
ctx.timestamp(); // 获取当前时间戳
ctx.getCurrentKey(); // 获取当前 key
ctx.output(); // 侧输出流
// 当前处理时间
ctx.timeServer().currentProcessTime();
ctx.timeServer().currentWaterMark();
// 注册处理时间和事件时间定时器
ctx.timeServer().registerProcessingTimeTimer(1L);
ctx.timeServer().registerEventsTimeTimer(1L);
// 删除处理时间定时器
ctx.timeServer().deleteProcessingTimeTimer(1L);
}

// 时间触发后操作
@override
public void OnTimer(timestamp, OnTimerContext, Collector<O>) {
// timestamp:当前触发的时间戳
}
}