SingleOutputStreamOperator<DataBean> watered = maped.assignTimestampsAndWatermarks(WatermarkStrategy.<DataBean>forBoundedOutOfOrderness(Duration.ZERO).withIdleness(Duration.ofMinutes(1)).withTimestampAssigner(new SerializableTimestampAssigner<DataBean>() {
@Override
public long extractTimestamp(DataBean dataBean, long l) {
return dataBean.getTs();
}
}));
watered.keyBy(DataBean::getGuid).process(new KeyedProcessFunction<Long, DataBean, String>() {
@Override
public void processElement(DataBean value, KeyedProcessFunction<Long, DataBean, String>.Context ctx, Collector<String> out) throws Exception {
System.out.println("事件时间:" + value.getTs());
long timermark = value.getTs() + 3000L;
System.out.println("注册的timermark:" + timermark);
ctx.timerService().registerEventTimeTimer(timermark);
out.collect(JSONUtil.toJsonStr(value));
}
@Override
public void onTimer(long timestamp, KeyedProcessFunction<Long, DataBean, String>.OnTimerContext ctx, Collector<String> out) throws Exception {
System.out.println("触发了" + timestamp + "当前watermark:" + ctx.timerService().currentWatermark());
}
}).print();