Flink默认先全量再增量同步,全量时会对checkpoint上锁,导致请求检查点时失败,任务重启

如题,我是新手小白一个。同步的这个表很大,大概需要4小时时间才能导出所有数据。
我在启动一个flink任务时,使用的是1.20版本,对应的flink-sql-connector-oracle-cdc-3.3.0.jar。
同步命令如下,默认会先全量同步,对checkpoint上锁,导出这个表的全部数据后创建快照,释放checkpoint锁,接着自动进入增量同步模式:
bin/flink run \
-Dexecution.checkpointing.interval=1min \
-Dexecution.checkpointing.interval-during-backlog=0 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
lib/flink-doris-connector-1.20-24.1.0.jar \
oracle-sync-database \
--database test_db \
--oracle-conf hostname=192.168.18.223 \
--oracle-conf port=1521 \
--oracle-conf username=tjxmcs \
--oracle-conf password='fgdsagasdfg' \
--oracle-conf database-name=ORCL \
--oracle-conf schema-name=TJXMCS \
--including-tables="MDTRT_D" \
--oracle-conf debezium.log.mining.strategy=online_catalog \
--oracle-conf debezium.log.mining.continuous.mine=true \
--oracle-conf debezium.database.tablename.case.insensitive=false \
--oracle-conf debezium.database.history.store.only.captured.tables.ddl=true \
--sink-conf fenodes=22.200.1.1:8030 \
--sink-conf benodes=22.200.1.1:8040 \
--sink-conf username=root \
--sink-conf password="xzeage" \
--sink-conf jdbc-url=jdbc:mysql://22.200.1.1:9030 \
--table-conf light_schema_change=true \
--table-conf replication_num=1

我又搜到flink可以设置execution.checkpointing.interval-during-backlog=0来取消全量同步阶段时的checkpoint。设置后再次启动任务, 检查日志发现,在snapshot step,刚开始导出数据时,就仍然有如下日志:
org.apache.flink.cdc.debezium.internal.DebeziumChangeFetcher [] - Database snapshot phase can't perform checkpoint, acquired Checkpoint lock.

果不其然,在checkpointing.interval的时间到了之后,又开始trigging checkpoint,然后由于已经被锁了,trig超时失败,导致任务重启。
我之前的做法是直接延长checkpointing.interval的时间,设为好几个小时。但这样也治标不治本,万一有更大的表格,一张表要导出1天,那又得重新设。
望各位大佬解答,能否在全量阶段避免这个checkpoint操作?

展开
收起
aliyun8402171973 2025-02-13 18:01:56 82 发布于江苏 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理