阿里巴巴开源canal 工具数据同步异常CanalParseException:parse row data failed,column size is not match for table...... (2)

之后在收到每条DDL变更时,把alter table add/drop column等,全部传递给druid,由druid识别ddl语句并在内存里执行具体的add/drop column的行为,维护一份最终的表结构

定时把druid的内存表结构,做一份checkpoint,之后的位点回溯,可以是checkpoint + 增量DDL重放的方式来快速构建任意时间点的表结构

最终方案示意图

阿里巴巴开源canal 工具数据同步异常CanalParseException:parse row data failed,column size is not match for table......

 

 

 

C0为初始化的checkpoint,拿到所有满足订阅条件的表结构

D1为binlog日志流中的DDL,它会有时间戳T的标签,用于记录不同D1/D2之间的先后关系

定时产生一个checkpoint cm,并保存对应的checkpoint时间戳

用户如果回溯位点到任意时间点Tx,对应的表结构就是 checkpoint + ddl增量的结合

接口设计:

public interface TableMetaTSDB { /** * 初始化 */ public boolean init(String destination); /** * 获取当前的表结构 */ public TableMeta find(String schema, String table); /** * 添加ddl到时间表结构库中 */ public boolean apply(BinlogPosition position, String schema, String ddl, String extra); /** * 回滚到指定位点的表结构 */ public boolean rollback(BinlogPosition position); /** * 生成快照内容 */ public Map<String/* schema */, String> snapshot(); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsffzd.html