flink cdc 捕获ddl语句失败问题,个人解决方案
flink cdc底层抽取数据原理是按表分块,进行快照读获取所有数据,当全量数据收集完成后,继续获取binlog增量数据。
以上操作,在执行全量数据收集时,若源端数据库用户执行ddl命令(如修改表字段等),flink cdc当前阶段无法感知表结构变化。
解决方案:
split reader 执行分块sql查询时,保存上一次的表字段,若获取的表字段与上一次不一致,说明表结构发生变化;通知jobmaster表结构变化事件,并暂停当前数据采集任务jobmaster 获取到表结构变化事件后,发起checkpoint操作(正在运行的spilt reader(获取到未发生字段变化的记录)继续发送数据);唤醒暂停的split reader,当split reader (暂停或者运行的)获取到checkpoint事件后,检查对应表结构,并更新相关表结构数据。checkpoint事件继续传递到下游算子,当到达sink算子时,sink执行ddl命令更新目的端表结构,后续所有reader正常运行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)