Ваш триггер AfterWatermark.withEarlyFirings(...)
сработает в последний раз, когда водяной знак достигнет конца окна, а затем сбросит все последующие данные. Такие триггеры отключены из-за почти уверенности в том, что это потеря данных.
В вашем случае вы устанавливаете допустимую задержку через .withAllowedLateness(<20 minutes>)
. Я предполагаю, что вам нужен какой-то вывод, включающий эти 20 минут данных. Но его всегда отбрасывали. Допустимая задержка не действует, поскольку триггер отбрасывает данные.
Ваш обходной путь - правильное изменение. Это приведет к немедленной выдаче запаздывающих данных. Для лучшей читабельности я рекомендую почти всегда использовать триггер, например:
AfterWatermark.pastEndOfWindow()
.withEarlyFirings(...)
.withLateFirings(...)
Это четко очерчивает «жизненный цикл» агрегирования: у вас есть одно поведение для ранних / предполагаемых результатов, одно - «готово». вывод, а затем одно поведение для результатов поздних / исправлений.
Ниже по потоку вы можете наблюдать PaneInfo
, чтобы настроить обработку для трех вышеуказанных случаев.