プロジェクトで 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 を超えます。このような、
keyBy
ただし、Table SQLの代わりに DataStream API と を使用するとGROUP BY
、チェックポイントのサイズは通常の 1MB 未満になります。
なんで?
-------2019-03-25 更新--------
いくつかのテストを行ってソース コードを読んだ後、その理由は RocksDB にあることがわかりました。
状態バックエンドとして RockDB を使用する場合、チェックポイントのサイズはキーごとに約 5MB を超え、ファイルシステムを状態バックエンドとして使用する場合、チェックポイントのサイズはキーごとに 100KB 未満に減少します。
状態を保持するために RocksDB が大量のスペースを必要とするのはなぜですか? いつ RocksDB を選択する必要がありますか?