我正在Trigger为我的应用程序使用带有自定义功能的 GlobalWindow。根据要求,在 Trigger 函数中,我只需要在窗口中的第一个元素上启动一个处理时间计时器。
我尝试使用变量来实现它firstEventflag。像这样。
.window(GlobalWindows.create())
.trigger(new Trigger<ImpactEventObject, GlobalWindow>() {
Boolean firstEventflag = false;
@Override
public TriggerResult onElement(ImpactEventObject impactEventObject, long l, GlobalWindow globalWindow, TriggerContext triggerContext) throws Exception {
if (!firstEventflag) {
firstEventflag = true;
triggerContext.registerProcessingTimeTimer(
triggerContext.getCurrentProcessingTime() + 20000);
}
return TriggerResult.CONTINUE;
}
@Override
public TriggerResult onProcessingTime(long l, GlobalWindow globalWindow, TriggerContext triggerContext) throws Exception {
return TriggerResult.FIRE;
}
但这失败了,因为今天我发现firstEventflag每次创建新窗口时都没有初始化变量,它取决于正在处理窗口的子任务,这意味着不同的窗口可以共享同一个变量,firstEventflag从而使这个逻辑实际上毫无用处。鉴于此,我该如何解决我的问题?
函数式编程
相关分类