Flink1.15.4 中利用flinksql CDC同步mysql数据到kafka中,一旦sql中使用SET 'table.exec.state.ttl' = '48h' 后,手动停止任务,再通过checkpoint/savepoint恢复,还是从头在同步数据到upsert-kafka中,请问是什么原因?难道设置TTL后,就恢复job后就无法增量同步数据吗?状态后端为rocksdb,flinksql中参数如下:
SET 'execution.checkpointing.interval' = '10s';
-- SET 'table.exec.state.ttl' = '48h';
SET 'table.exec.mini-batch.enabled' = 'true';
SET 'table.exec.mini-batch.allow-latency' = '10s';
SET 'table.exec.mini-batch.size' = '500';
SET 'table.optimizer.agg-phase-strategy' = 'TWO_PHASE';
SET 'execution.checkpointing.max-concurrent-checkpoints'='1';
SET 'execution.checkpointing.externalized-checkpoint-retention' = 'RETAIN_ON_CANCELLATION';
看了您的建议后,将flink升级到1.18,flinksql设置ttl后,CDC同步mysql数据到kafka后,任务停止,再从checkpoint恢复增量同步问题已解决。然后又开始测试mongo-cdc同步mongo数据到kafka,还是设置TTL,再从chekcpoint恢复,依然无效,直到增加参数:'scan.incremental.snapshot.enabled' = 'true'后,才能正常从checkpoint恢复后 支持增量数据同步
在Flink SQL中使用table.exec.state.ttl
配置项来设置状态的生命周期,这个设置会影响作业中维护的各种状态的存活时间,包括但不限于source reader的状态。当一个状态超过了其TTL(Time To Live)之后,Flink将会清除这些状态。这意味着如果一个作业因为某些原因(例如手动停止)重启后,如果之前的状态已经因为超时被清理,那么作业可能无法从上次离开的地方继续执行,因为它依赖的一些状态信息可能已经丢失。
具体到您的场景,设置了table.exec.state.ttl
为48小时,并且在停止任务后尝试通过checkpoint或savepoint恢复作业。理论上,使用checkpoint或savepoint应该能够恢复作业的执行状态并继续增量同步,因为checkpoint/savepoint包含了作业执行的所有必要状态,它们独立于table.exec.state.ttl
之外。
但是,如果在使用checkpoint/savepoint恢复作业时仍然看到从头开始同步数据,这可能有几个潜在的原因:
Checkpoint/Savepoint 不完整或损坏:确认保存的checkpoint或savepoint是否包含了所有必要的状态信息,有时候这些点可能会因为各种原因(如网络问题、磁盘空间不足等)未能正确完成。
配置冲突或误解:虽然一般情况下table.exec.state.ttl
不应该直接影响从checkpoint/savepoint恢复的能力,但可能存在某种配置上的误解或不兼容性,导致系统错误地处理了状态恢复流程。
RocksDB 状态后端的特殊行为:使用RocksDB作为状态后端时,如果配置不当或存在已知bug,可能会影响到状态的恢复逻辑,尤其是当涉及到TTL管理和状态清理时。
Flink版本特定问题:特定于Flink 1.15.4的bug或未文档化的特性可能导致了这一行为,建议查阅Flink的官方issue跟踪系统看是否有相关的问题报告。
解决此问题的建议步骤:
table.exec.state.ttl
和状态恢复相关的已知问题或注意事项。table.exec.state.ttl
的情况下恢复作业,看是否能够正常增量同步,以此来进一步定位问题。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。