跨 Chunk 迁移的 Checkpoint 恢复:真实 MySQL → Flink → Paimon 结果(最终运行 final/ 下四组): - move-pre:A 已输出、B 未 LOW、迁移前完成 C1;C2 外部发布后失败;实际恢复 C1,只重扫 B。恢复后 C3/C4 完成;MySQL 20 行,Paimon 19 行,缺 (102,100,20)。 - move-post:相同 C1 和迁移;binlog 已追赶 amount=32 后完成 C2;C3 外部发布后失败;实际恢复 C2 binlog Split,不重扫 A/B;C4/C5 完成,仍缺上述行。 - control-pre/control-post:仅将 id102 amount20→21,c 保持110;对应两个恢复路径,均为20行×3列一致。 - 四个行为刻画断言通过、进程退出0;仅两组对照 data_equal=true,迁移两组为false。不是连接器修复。 版本与链路:见 environment.json、dependencies.txt 和 execution.log 的 LOADED。 CDC release-3.7.0 固定提交045e8da45df4b1017849b04e2d8bfe8f0ed7936d,Flink1.20.3,Paimon2.0.0,Java11.0.29,MySQL8.4.11 ROW/FULL GTID ON。 真实 Source Factory/translator、MySqlSource、Splitter/Assigner、Readers、SchemaOperator、分区、BucketAssign、PaimonWriter、真实precommit。MiniCluster一个TM、8slots、p=1;filesystem、bucket=1、EVOLVE、input changelog配置、8mb writer buffer,默认回填。仅检查当前表,没有扫描这四组input changelog。 固定时序及证据: 1. 初始20行c95..114;ANALYZE TABLE;chunk.size=10、chunk key显式设c;生产Splitter实际生成A<105、B>=105,断言边界与原始两次扫描。 2. 现有SnapshotPhaseHooks阻塞B pre-LOW,等A的10行输出并完成C1。Reader状态实际仅B,HIGH=null,源id102仍为(102,110,20)。 3. 释放B,迁移c110→100(对照只改amount21),再更新id101 amount11、id103 amount31;均为独立提交。生产LOW/HIGH日志与hook逐项匹配。独立server-id8800-8810原始binlog审计确认H_A1、DDL、物理JM/TM/HA、其他存储和本组changelog。 未重跑全部历史Reader/组件测试。第二、三、五篇共用这4个新场景,不与原Reader或无故障作业重复计数。