При использовании Flink Table SQL в моем проекте я обнаружил, что если бы в моем SQL-запросе было какое-либо предложение GROUP BY
, размер контрольной точки значительно увеличился бы.
Например,
INSERT INTO COMPANY_POST_DAY
SELECT
sta_date,
company_id,
company_name
FROM
FCBOX_POST_COUNT_VIEW
Размер контрольной точки будет меньше 500 КБ.
Но при таком использовании
INSERT INTO COMPANY_POST_DAY
SELECT
sta_date,
company_id,
company_name,
sum(ed_post_count)
FROM
FCBOX_POST_COUNT_VIEW
GROUP BY
sta_date, company_id, company_name, TUMBLE(procTime, INTERVAL '1' SECOND)
Размер контрольной точки будет превышать 70 МБ, даже если нет сообщенийобработанный.Например,
Но при использовании API DataStream и keyBy
вместо таблицы SQL GROUP BY
size размер контрольной точки будет нормальным, меньшечем 1 МБ.
Почему?
------- обновлено в 2019-03-25 --------
После выполнения некоторых тестов ичитая исходный код, мы обнаружили, что причиной этого была RocksDB.
При использовании RockDB в качестве бэкэнда состояния размер контрольной точки будет превышать примерно 5 МБ на ключ, а при использовании файловой системы в качестве бэкэнда состоянияразмер контрольной точки уменьшится до менее 100 КБ на ключ.
Почему RocksDB нужно так много места для хранения состояния?Когда мы должны выбрать RocksDB?