在我的项目中使用 Flink Table SQL 时,我发现如果GROUP BY
我的 SQL 中有任何子句,检查点的大小会大大增加。
例如,
INSERT INTO COMPANY_POST_DAY
SELECT
sta_date,
company_id,
company_name
FROM
FCBOX_POST_COUNT_VIEW
检查点大小将小于 500KB。
但是这样使用的时候,
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)
即使没有处理任何消息,检查点大小也会超过 70MB。像这样,
但是当使用 DataStream API 而keyBy
不是 Table SQLGROUP BY
时,检查点的大小是正常的,小于 1MB。
为什么?
--------更新于2019-03-25--------
在做了一些测试和阅读源码后,我们发现这是 RocksDB 的原因。
当使用 RockDB 作为 state backend 时,checkpoint 的大小会超过每个 key 5MB 左右,而当使用 filesystem 作为 state backend 时,checkpoint 的大小会下降到每个 key 不到 100KB。
为什么 RocksDB 需要这么大的空间来保存状态?我们什么时候应该选择 RocksDB?