☰
paimon merge into量大,update delete量多,导致compact太久
2026/10/15 3:55:05 网站建设 项目流程

问题: 量大导致compact太久或者没compact时下游读取太慢 如何解决

减少 update/delete 数量 上游先按主键合并,只把同一 key 的最后一次变更写入 Paimon

比如同一个主键 1 分钟内更新 20 次,直接写 Paimon 就是 20 条变更,compact 要处理 20 个版本。

如果业务允许,先在 Flink 上游按主键做 mini-batch 合并,只保留最后一条

提高 compact 并行度 增加 bucket 数,避免单 partition / 单 bucket 过大

拆出独立 compact 任务 写入任务只写,compact 用独立 Flink job 跑

避免频繁 full compaction 检查 full-compaction.delta-commits 和 compact action 模式

'num-sorted-run.compaction-trigger' = '5'
'num-sorted-run.stop-trigger' = '8'

'full-compaction.delta-commits'

num-sorted-run.compaction-trigger sorted run 数达到多少触发 compact
num-sorted-run.stop-trigger backlog 太多时是否阻塞写入等待 compact

减少 changelog 负担 不需要 changelog 就用 changelog-producer=none

调整文件和 buffer 增大 write-buffer-size,合理设置 target-file-size

改数据模型 大批量更新/删除时,用重写分区或重建表代替逐行变更

如果是海量批量更新,直接重写更划算 CREATE TABLE new_t AS SELECT ... FROM old_t WHERE ... 或者 INSERT OVERWRITE 受影响分区

(部分删除场景)不用:DELETE FROM t WHERE dt < '2026-01-01';

使用:ALTER TABLE t DROP PARTITION (...)

如果只涉及部分分区或者桶,则compact指定对应分区和桶参数,减少compact数据量:Compaction and Cleanup | Apache Paimon

bucket太少会导致compact并行度受限,合理增加bucket数

更合理的是让 bucket 数和写入/compact 并行度匹配。例如:

'bucket' = '64',
'bucket-key' = 'id',
'sink.parallelism' = '64'

Paimon 官方建议 fixed bucket 下 sink.parallelism <= bucket,最好接近或相等

增大写buffer,减少小文件

'write-buffer-size' = '256 mb'
'write-buffer-spillable' = 'true'
'target-file-size' = '256 mb'

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询