Ваше решение 1. кажется, лучший подход здесь.
Относительно вашего комментария:
Это прекрасно работает, но кажется расточительным, так как вызывается для каждой записи.
Проблема в том, что вы надеваетеНе знаю, какая запись будет последней.Следовательно, вам всегда нужно хранить последнюю просмотренную запись.Поскольку результат ReduceFunction
сохраняется в состоянии (либо для следующей оценки метода, либо для возврата его в качестве результата), это именно то, что здесь происходит.
Ваше решение 2. на самом деле меньшеэффективный (с точки зрения хранения / памяти).Он запоминает все записи, поступившие в течение минуты, и перебирает все, когда оценивается окно.В отличие от этого, решение 1. хранит только одно значение (результат последней оценки функции).
Вы можете реализовать решение с обычным ProcessFunction
и таймером, однако я не думаю, чтоэто будет значительно быстрее, чем окно + ReduceFunction
.Более того, для этого потребуется намного больше кода.