点击上方蓝
字关注~
短窗口的计算由于其窗口期较短,那么很快就能获取到结果,但是对于长窗口来说窗口时间比较长,如果等窗口期结束才能看到结果,那么这份数据就不具备实时性,大多数情况我们希望能够看到一个长窗口的结果不断变动的情况,对此Flink提供了ContinuousEventTimeTrigger连续事件时间触发器与ContinuousProcessingTimeTrigger连续处理时间触发器,指定一个固定时间间隔interval,不需要等到窗口结束才能获取结果,能够在固定的interval获取到窗口的中间结果。
ContinuousEventTimeTrigger
ContinuousEventTimeTrigger表示连续事件时间触发器,用在EventTime属性的任务流中,以事件时间的进度来推动定期触发
public TriggerResult onElement(Object element, long timestamp, W window, TriggerContext ctx) throws Exception {
--part 1
if (window.maxTimestamp() <= ctx.getCurrentWatermark()) {
// if the watermark is already past the window fire immediately
return TriggerResult.FIRE;
} else {
ctx.registerEventTimeTimer(window.maxTimestamp());
}
---part 2
ReducingState<Long> fireTimestamp = ctx.getPartitionedState(stateDesc);
if (fireTimestamp.get() == null) {
long start = timestamp - (timestamp % interval);
long nextFireTimestamp = start + interval;
ctx.registerEventTimeTimer(nextFireTimestamp);
fireTimestamp.add(nextFireTimestamp);
}

本文介绍了Flink中的ContinuousEventTimeTrigger和ContinuousProcessingTimeTrigger,用于长窗口实时计算,避免等待整个窗口期结束。重点讨论了ContinuousEventTimeTrigger的工作原理,包括触发机制、定时器注册以及注意事项,并提供了一个每小时商品销售额的实时更新案例。
最低0.47元/天 解锁文章
455

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



