大量数据同步一致性问题

2024-01-13 18:22:37 +08:00
 15342

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

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

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

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

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

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

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

感谢各位大佬的解答。
另外各位大佬有没有这种级别数据同步的监控档案吗? 没这方面的经验。
RicherWQ
2024-01-15 09:24:23 +08:00
@nnegier 定时批量遍历查询写入
RicherWQ
2024-01-15 09:29:46 +08:00
@15342 这个要自己考虑,和业务场景有关,先不考虑目前你们的数据方案是否合理,默认合理的话,无论修改的人和地方有多少都无所谓,首先可以确保修改的原数据没有问题就可以了,然后就是同步的问题了,你数据本身有版本号,每次变更都要加 1 ,这样就能知道哪个数据版本是新的了,你要同步到 starrocks ,那么就需要判断如果你同步过来的数据比 starrocks 里边的版本号低就不同步,反之就同步。如果你们数据变化多的话,你定时同步增量数据期间还会产生大量不一致数据,这个时候就要单挑变化一起同步了。
15342
2024-01-15 15:53:32 +08:00
@RicherWQ 大致了解了,感谢。

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

https://tanronggui.xyz/t/1008374

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

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

© 2021 V2EX