Почему мои запросы Flink SQL имеют очень разные размеры контрольных точек?

StreamTokenizer может быть быстрее, как предлагается здесь .

0
задан Ruoyu Dai 25 March 2019 в 10:08
поделиться

1 ответ

Прежде всего, я бы не стал считать 70 МБ огромным государством. Есть много рабочих мест Flink с несколькими ТБ государства. Что касается вопроса, почему размеры состояний обоих запросов различаются:

Первый запрос - это простой проекционный запрос, что означает, что каждая запись может обрабатываться независимо. Следовательно, запрос не должен «запоминать» какие-либо записи, а только смещения потока для восстановления.

Второй запрос выполняет агрегацию окон и должен запоминать промежуточный результат (частичную сумму) для каждого окна до тех пор, пока время не достигнет достаточного уровня, чтобы результат был окончательным и мог быть передан.

Поскольку запросы Flink SQL транслируются в операторы DataStream, между запросами SQL и реализацией агрегации с помощью keyBy().window() нет большой разницы. Оба запускают практически одинаковый код.

Обновление : Определена причина повышенного состояния, вызванная RocksDBStateBackend. Эти издержки являются не накладными расходами для каждого ключа, а накладными расходами для оператора с состоянием. Поскольку RocksDBStateBackend предназначен для хранения размеров состояний от нескольких ГБ до ТБ, издержки в несколько МБ незначительны.

0
ответ дан Fabian Hueske 25 March 2019 в 10:08
поделиться