V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
yuanyao
V2EX  ›  数据库

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

  •  
  •   yuanyao · Nov 14, 2024 · 1825 views
    This topic created in 539 days ago, the information mentioned may be changed or developed.
    想做 mysql->redis 的实时数据同步,网上也有很多开源项目,不过太重了不适合使用,需要自己搞一个,我们已经有 canal 能接入数据库的变更消息。我想的简单方案:新增一个同步表时,全量扫表一次将数据同步到 redis ,消费 canal->kafka 持续将增量数据同步到 redis ,保证 redis 数据一直为最新,再加上每天运行 1 次全量扫表同步确保没有脏数据。不需要考虑数据删除的问题,业务场景用不到。

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

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

    如果先开启 canal 消费的增量同步,然后全量扫表同步,我想下了这样是没问题的,不会出现漏数据和数据不一致的情况,但不确定有没有我没考虑到的坑?
    decken
        1
    decken  
       Nov 14, 2024
    记录全量同步开始的时间, 然后启动增量,指定刚才的时间, 从这个时间回溯 kafka
    yuanyao
        2
    yuanyao  
    OP
       Nov 14, 2024
    @decken 这个算是另一个方案了,如果我说的方案不行,那这个可以考虑。在开始全量同步前先去 kafka 查下最新的 offset ,增量消费的时候从这个 offset 开始消费,这样对吧
    decken
        3
    decken  
       Nov 14, 2024
    @ly901206 #2 kafka 可以根据时间回溯的 方便一点
    jones2000
        4
    jones2000  
       Nov 14, 2024
    一般不都是基于日志同步。
    xiaogu2014
        5
    xiaogu2014  
       Nov 15, 2024
    ```再加上每天运行 1 次全量扫表同步确保没有脏数据```
    这部分有必要吗? 全量扫表的同时如果有数据改动呢?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1128 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 17:58 · PVG 01:58 · LAX 10:58 · JFK 13:58
    ♥ Do have faith in what you're doing.