窗口触发器
1. 为什么要有触发器
- 决定何时触发窗口后续的逻辑执行。每个窗口都有一个默认的触发器,时间窗口默认watermark超过EndTime就触发计算
窗口类型 |
触发器 |
触发时机 |
EventTime(Tumblng/Sliding/Session) |
EventTimeTrigger |
一旦Watermark没过窗口的EndTime,该窗口触发 |
ProcessingTime(Tumblng/Sliding/Session) |
ProcessingTimeTrigger |
一旦系统时间没过窗口的EndTime,该窗口触发 |
GlobalWindow |
NeverTrigger |
永不触发 |
2. 触发器怎么使用
- Flink中定义了Trigger抽象类,任何trigger必须继承Trigger类,Flink官方提供了几种常用的trigger实现,同时,用户可以根据需求自定义trigger。
public abstract class Trigger<T, W extends Window> implements Serializable {
private static final long serialVersionUID = -4104633972991191369L;
public abstract TriggerResult onElement(T element, long timestamp, W window, TriggerContext ctx) throws Exception;
public abstract TriggerResult onProcessingTime(long time, W window, TriggerContext ctx