Я использую GlobalWindow с пользовательским Trigger
для своего приложения.Согласно требованию, в функции 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
, что делает эту логику практически бесполезной.Учитывая это, как мне решить мою проблему?