V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
15342
V2EX  ›  程序员

大量数据同步一致性问题

  •  
  •   15342 · 316 天前 via Android · 2004 次点击
    这是一个创建于 316 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求是把 es 的数据同步到 starrocks ,业务会拿 es 和 st 的数据做功能,需要保持数据的一致性。

    现在是使用定时任务每天同步 es 到 st ,还有业务触发同时修改的。修改方式很多导致数据不一致。而且每天新进的数据量有 2000 万左右。

    目前我想的是这个程序按消息级别去定时检测,有不一致的就同步。

    有没有其他方法可以让 es 和 st 最终数据一致?

    10 条回复    2024-01-15 15:53:32 +08:00
    RicherWQ
        1
    RicherWQ  
       316 天前
    我们之前是这么做的, 分全量同步和部分同步,全量同步每天定时同步一次, 部分同步就是业务触发的时候进行同步。要求你每条数据有版本号,这样更新的时候如果本地版本新就不更新了。
    flmn
        2
    flmn  
       316 天前
    es 数据从哪来的?是程序直接修改么?还是也是从数据源同步过来的?

    一般这类情况,要用 CDC 方案才靠谱。
    Akitora
        3
    Akitora  
       316 天前
    遇到过类似的问题,千万级数据同步到 redis ,当时有考虑过 CDC 方案,实现起来比较复杂,最终还是选择了 1L 类似的方案
    haimianbihdata
        4
    haimianbihdata  
       316 天前 via Android
    看看 flink cdc 这边有没有方案
    noparking188
        5
    noparking188  
       315 天前   ❤️ 1
    2000 万数据量不多,看了下 starrocks 支持流处理 https://docs.starrocks.io/docs/integrations/streaming/
    我熟悉的类似这种实时同步到 AP 数仓或者数据湖的方案,一般都 Kafka 队列,然后用个消费端根据 interval 和 buffer 及时往目标库分小批次的写。
    你给的信息不多,es 的数据是业务数据?那就同时写 es 和 starrocks ,可以加个离线任务每天对比两边数据是否一致
    nnegier
        6
    nnegier  
       315 天前 via Android
    @RicherWQ #1 部分同步很好理解,全量同步是怎么操作呢?
    15342
        7
    15342  
    OP
       315 天前 via Android
    @RicherWQ 全量是指每天新进的数据吗? 我们现在也是分成每天增量定时同步一次,业务触发处理。但是业务涉及的地方太多了(增删改),改的人又多,容易出问题。 数据的版本号是指修改后这条数据的新的版本号和数据库的这条对比吗?多谢

    @flmn es 的数据有 1.上游服务生成 2.我们自己的业务生成。cdc 我去了解下 多谢
    @haimianbihdata 多谢
    @noparking188 es 的数据有 1.上游服务生成 2.我们自己的业务生成。 上游生成的目前直接定时任务从 es 用导入到 st 的。 还有部分业务操作就 2 边同时修改的。但是业务要求数据一致性高。现在也是想这个程序去对比两边的数据。

    感谢各位大佬的解答。
    另外各位大佬有没有这种级别数据同步的监控档案吗? 没这方面的经验。
    RicherWQ
        8
    RicherWQ  
       315 天前
    @nnegier 定时批量遍历查询写入
    RicherWQ
        9
    RicherWQ  
       315 天前
    @15342 这个要自己考虑,和业务场景有关,先不考虑目前你们的数据方案是否合理,默认合理的话,无论修改的人和地方有多少都无所谓,首先可以确保修改的原数据没有问题就可以了,然后就是同步的问题了,你数据本身有版本号,每次变更都要加 1 ,这样就能知道哪个数据版本是新的了,你要同步到 starrocks ,那么就需要判断如果你同步过来的数据比 starrocks 里边的版本号低就不同步,反之就同步。如果你们数据变化多的话,你定时同步增量数据期间还会产生大量不一致数据,这个时候就要单挑变化一起同步了。
    15342
        10
    15342  
    OP
       314 天前
    @RicherWQ 大致了解了,感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.