[alibaba/canal]如何保证全量同步和增量同步的一致性?

2023-12-12 63 views
0

比如我要同步一个mysql数据库,里面有很多表,每个表又有很多记录,每个表的数据还在实时变化。 那么如何能够正确全量同步和增量同步呢? 因为在同步全量的时候,数据还在不停的变化,这样会导致增量同步的时候,某些新记录已经在全量同步的时候同步过去了,增量同步的时候又同步了一遍,会导致数据重复或者冗余(如果该记录没有主键或者唯一值等),如何解决这个问题,谢谢!

回答

3

可以借鉴 flink-cdc 的做法, 总体上可以看做是对 binlog 消费做时停, 然后查询出全量分片数据, 在完成一些数据一致性的处理之后, 拼接在 binlog 上之后再重新开始消费

1

这个感觉太复杂了,而且好像只对有主键的表有效,如果表有主键,可能就不需要这么复杂了。

7

无主键表可能要全列匹配 + limit 1;有主键的表可以幂等消费:insert -> replace, update -> delete before + replace after

4
  1. 记录开始时间,做全量同步
  2. 等全量同步结束后,暂停该表对应topic的数据同步消费(写入mq的逻辑还在执行)
  3. 以第1步的开始时间为起始,做增量同步
  4. 增量同步结束之后继续消费,等待消费offset追上,就结束了