V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuanyao
V2EX  ›  数据库

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

  •  
  •   yuanyao · 34 天前 · 958 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想做 mysql->redis 的实时数据同步,网上也有很多开源项目,不过太重了不适合使用,需要自己搞一个,我们已经有 canal 能接入数据库的变更消息。我想的简单方案:新增一个同步表时,全量扫表一次将数据同步到 redis ,消费 canal->kafka 持续将增量数据同步到 redis ,保证 redis 数据一直为最新,再加上每天运行 1 次全量扫表同步确保没有脏数据。不需要考虑数据删除的问题,业务场景用不到。

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

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

    如果先开启 canal 消费的增量同步,然后全量扫表同步,我想下了这样是没问题的,不会出现漏数据和数据不一致的情况,但不确定有没有我没考虑到的坑?
    5 条回复
    decken
        1
    decken  
       34 天前
    记录全量同步开始的时间, 然后启动增量,指定刚才的时间, 从这个时间回溯 kafka
    yuanyao
        2
    yuanyao  
    OP
       34 天前
    @decken 这个算是另一个方案了,如果我说的方案不行,那这个可以考虑。在开始全量同步前先去 kafka 查下最新的 offset ,增量消费的时候从这个 offset 开始消费,这样对吧
    decken
        3
    decken  
       34 天前
    @ly901206 #2 kafka 可以根据时间回溯的 方便一点
    jones2000
        4
    jones2000  
       34 天前
    一般不都是基于日志同步。
    xiaogu2014
        5
    xiaogu2014  
       34 天前
    ```再加上每天运行 1 次全量扫表同步确保没有脏数据```
    这部分有必要吗? 全量扫表的同时如果有数据改动呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3476 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:42 · PVG 12:42 · LAX 20:42 · JFK 23:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.