Прежде всего, я бы не стал считать 70 МБ огромным государством. Есть много рабочих мест Flink с несколькими ТБ государства. Что касается вопроса, почему размеры состояний обоих запросов различаются:
Первый запрос - это простой проекционный запрос, что означает, что каждая запись может обрабатываться независимо. Следовательно, запрос не должен «запоминать» какие-либо записи, а только смещения потока для восстановления.
Второй запрос выполняет агрегацию окон и должен запоминать промежуточный результат (частичную сумму) для каждого окна до тех пор, пока время не достигнет достаточного уровня, чтобы результат был окончательным и мог быть передан.
Поскольку запросы Flink SQL транслируются в операторы DataStream, между запросами SQL и реализацией агрегации с помощью keyBy().window()
нет большой разницы. Оба запускают практически одинаковый код.
Обновление : Определена причина повышенного состояния, вызванная RocksDBStateBackend. Эти издержки являются не накладными расходами для каждого ключа, а накладными расходами для оператора с состоянием. Поскольку RocksDBStateBackend предназначен для хранения размеров состояний от нескольких ГБ до ТБ, издержки в несколько МБ незначительны.
Это объяснено полностью в ApiDemos в SDK. Пример, который Вы хотите, называют: ProgressBar3.java и может быть найден в \ApiDemos\src\com\example\android\apis\view\
Кроме того, если Вы хотите удалить границы диалогового окна так, чтобы только индикатор выполнения появился, можно определить само диалоговое окно как прозрачное представление/наложение (это объяснено в примерах также).