需求是把 es 的数据同步到 starrocks ,业务会拿 es 和 st 的数据做功能,需要保持数据的一致性。
现在是使用定时任务每天同步 es 到 st ,还有业务触发同时修改的。修改方式很多导致数据不一致。而且每天新进的数据量有 2000 万左右。
目前我想的是这个程序按消息级别去定时检测,有不一致的就同步。
有没有其他方法可以让 es 和 st 最终数据一致?
1
RicherWQ 314 天前
我们之前是这么做的, 分全量同步和部分同步,全量同步每天定时同步一次, 部分同步就是业务触发的时候进行同步。要求你每条数据有版本号,这样更新的时候如果本地版本新就不更新了。
|
2
flmn 314 天前
es 数据从哪来的?是程序直接修改么?还是也是从数据源同步过来的?
一般这类情况,要用 CDC 方案才靠谱。 |
3
Akitora 314 天前
遇到过类似的问题,千万级数据同步到 redis ,当时有考虑过 CDC 方案,实现起来比较复杂,最终还是选择了 1L 类似的方案
|
4
haimianbihdata 314 天前 via Android
看看 flink cdc 这边有没有方案
|
5
noparking188 314 天前 1
2000 万数据量不多,看了下 starrocks 支持流处理 https://docs.starrocks.io/docs/integrations/streaming/
我熟悉的类似这种实时同步到 AP 数仓或者数据湖的方案,一般都 Kafka 队列,然后用个消费端根据 interval 和 buffer 及时往目标库分小批次的写。 你给的信息不多,es 的数据是业务数据?那就同时写 es 和 starrocks ,可以加个离线任务每天对比两边数据是否一致 |
7
15342 OP @RicherWQ 全量是指每天新进的数据吗? 我们现在也是分成每天增量定时同步一次,业务触发处理。但是业务涉及的地方太多了(增删改),改的人又多,容易出问题。 数据的版本号是指修改后这条数据的新的版本号和数据库的这条对比吗?多谢
@flmn es 的数据有 1.上游服务生成 2.我们自己的业务生成。cdc 我去了解下 多谢 @haimianbihdata 多谢 @noparking188 es 的数据有 1.上游服务生成 2.我们自己的业务生成。 上游生成的目前直接定时任务从 es 用导入到 st 的。 还有部分业务操作就 2 边同时修改的。但是业务要求数据一致性高。现在也是想这个程序去对比两边的数据。 感谢各位大佬的解答。 另外各位大佬有没有这种级别数据同步的监控档案吗? 没这方面的经验。 |