1,Trigger基础:
Trigger窗口触发器自带的类型有:
EventTimeTrigger
ProcessTimeTrigger
CountTrigger 等等
如果不满足自己的业务要求,可以自定义实现触发器:
简单案例:
package com.learning.window; import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.TimeCharacteristic; import org.apache.flink.streaming.api.datastream.AllWindowedStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.windowing.triggers.Trigger; import org.apache.flink.streaming.api.windowing.triggers.TriggerResult; import org.apache.flink.streaming.api.windowing.windows.TimeWindow; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer010; import java.util.Properties; /** * todo TriggerResult 的几个操作 CONTINUE(false, false),FIRE_AND_PURGE(true, true),FIRE(true, false), PURGE(false, true); * <p> * todo 1, CONTINUE 不触发,等待 * todo 2, FIRE 触发 数据保留 * todo 3,PURGE 不触发,数据清空 * todo 4,FIRE_AND_PURGE 触发 清除数据 */ public class TriggerDemo extends Trigger<Object, TimeWindow> { private static int flag = 0; // todo 进入窗口每个元素都触发 @Override public TriggerResult onElement(Object element, long l, TimeWindow timeWindow, TriggerContext ctx) throws Exception { ctx.registerProcessingTimeTimer(timeWindow.maxTimestamp()); if (flag > 9) { flag = 0; return TriggerResult.FIRE; //统计数量为10的时候 触发 } else { flag++; } //进入的元素 System.out.println("onElement : " + element); return TriggerResult.CONTINUE; } // todo

本文介绍了Flink Trigger的基础知识,包括EventTimeTrigger、ProcessTimeTrigger和CountTrigger等默认类型,并探讨了如何根据业务需求自定义触发器。同时,文章提到了window.getEnd与window.maxTimestamp的区别,并提供了简单案例代码。
最低0.47元/天 解锁文章
463

被折叠的 条评论
为什么被折叠?



