数据同步时,增量同步和全量同步如何配合保证数据一致性?

17 小时 6 分钟前
 ly901206
想做 mysql->redis 的实时数据同步,网上也有很多开源项目,不过太重了不适合使用,需要自己搞一个,我们已经有 canal 能接入数据库的变更消息。我想的简单方案:新增一个同步表时,全量扫表一次将数据同步到 redis ,消费 canal->kafka 持续将增量数据同步到 redis ,保证 redis 数据一直为最新,再加上每天运行 1 次全量扫表同步确保没有脏数据。不需要考虑数据删除的问题,业务场景用不到。

在初始化阶段,有个顺序问题困扰我:

如果我先扫表全量同步完成,再启动 canal 消费的增量同步,那么就可能漏数据了,因为扫表期间有可能中间新插入了数据,或者已同步的数据变更了。

如果先开启 canal 消费的增量同步,然后全量扫表同步,我想下了这样是没问题的,不会出现漏数据和数据不一致的情况,但不确定有没有我没考虑到的坑?
268 次点击
所在节点    数据库
4 条回复
decken
16 小时 38 分钟前
记录全量同步开始的时间, 然后启动增量,指定刚才的时间, 从这个时间回溯 kafka
ly901206
14 小时 38 分钟前
@decken 这个算是另一个方案了,如果我说的方案不行,那这个可以考虑。在开始全量同步前先去 kafka 查下最新的 offset ,增量消费的时候从这个 offset 开始消费,这样对吧
decken
14 小时 35 分钟前
@ly901206 #2 kafka 可以根据时间回溯的 方便一点
jones2000
7 小时 46 分钟前
一般不都是基于日志同步。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1089501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX