mysql 数据同步 elasticsearch 方案

2023-03-08 09:24:18 +08:00
 jiobanma

目前项目想把 mysql 中的数据同步到 elasticsearch 中,接触了几种方案,想咨询一下大家工作中都使用什么方案。

  1. mysql 中的全量数据使用 logstash 导入 es ,然后增量的数据通过 canal 监听 binlog 转发到消息队列,然后数据服务监听详细队列,维护 es 中的数据。 [优点] :代码侵入小,轻量级使用。 [缺点] :a. logstash 导入大量数据效率低,每次任务最多只能同步 100000 条,并且最少要 1 分钟执行一次。b. logstash 先全量,canal 再接着增量,两个时间点可能会出现数据一致性问题。c. 貌似 canal 的坑不少,并且 github 好像也不怎么维护了。

  2. flink cdc 同步 mysql 到 elasticsearch 。看了一下 demo 的演示,感觉挺强大的,完全不用写代码,基本上通过 flink sql 就可以搞定。但是尝试按照官方的教程在本地模拟一下,不知道是不是目前还不支持 es8 ,导致我的数据刚开始可以同步到 es ,但是之后的 CUD 操作都无法同步到 es ,flink 的 webui 也有错误信息。在官方的 github 上咨询了此事,目前还没有回复 https://github.com/ververica/flink-cdc-connectors/discussions/1968 。 [缺点] :网上的资料较少。

大家工作中都使用什么方案呢

6129 次点击
所在节点    程序员
68 条回复
SoulSleep
2023-03-08 10:22:45 +08:00
@Morriaty #18 对于你这个补充一下
我们在 es 里只存搜索条件+数据库主键,会有一个单独的服务用搜索条件得到各个表的数据库主键,然后在程序里聚合,查询效果对比:
1.关系型数据库,多表 join ,几亿数据,大概要 5~10 秒
2.现有方案,es+单表聚合,几亿数据,大概 0.x~2 秒
weofuh
2023-03-08 10:30:57 +08:00
可不可以历史数据用 datax ,增量数据用 canal 呢?
Aresxue
2023-03-08 10:33:40 +08:00
flink 没玩过,但是 canal 绝对是个坑,一个是 cpu 老是莫名其妙跑满,还有对主从模式很多地方都没有支持非常坑。
barbery
2023-03-08 10:41:11 +08:00
我们也是用 canal 同步,暂时没发现有什么坑,可能是我们的数据量不大😂
jiobanma
2023-03-08 10:45:42 +08:00
@SoulSleep 感谢大佬
Seulgi
2023-03-08 10:51:25 +08:00
dts 贼贵啊。
hotcool100
2023-03-08 10:55:42 +08:00
flink cdc 太吃内存和资源了,用 canal 好多了
changdy
2023-03-08 10:57:40 +08:00
2333 看来只有我一个人用的是 debezium 吗?
CRUD
2023-03-08 11:03:03 +08:00
我们是用 canal ,mysql -> canal -> rabbitmq -> 处理服务 -> es
jiobanma
2023-03-08 11:04:10 +08:00
@SoulSleep 看您的描述,整个链路都是用 canal 实现的,那历史数据方便怎么同步到 es 呢?我了解的是 canal 对全量数据的同步支持不是很好
brader
2023-03-08 11:22:48 +08:00
可以了解下这个项目 https://github.com/brokercap/Bifrost
用 go 写的,也很节省服务器资源
potatowish
2023-03-08 11:27:01 +08:00
debezium 支持全量和增量同步,flink cdc 也是基于它
FawkesV
2023-03-08 11:28:05 +08:00
学习了
Desdemor
2023-03-08 11:31:14 +08:00
canal -> kafka -> 处理服务 -> es
awalkingman
2023-03-08 12:25:39 +08:00
@j1132888093
@likeme
那要是写 mysql 成功了,写 es 失败了,,,数据的一致性咋个维护
v2e0xAdmin2
2023-03-08 13:44:26 +08:00
@jiobanma https://github.com/colosobo/drc

我们公司用的这个项目,可以全量同步,也可以增量同步。写到 kafka 或者 mq 里,然后 flink 消费写到 es 里。
v2e0xAdmin2
2023-03-08 13:47:15 +08:00
@SoulSleep canal 运维太麻烦了。
QunLeLZ
2023-03-08 14:03:01 +08:00
我们现在使用的是从 pg 同步数据到 es ,中间还要做一定逻辑处理,还是比较方便的,直接写 SQL 就行了。不过我们用的是阿里的 Flink 服务,自建 Flink 的话会稍微麻烦点,但我理解应该问题也不会太大。
wmwgijol28
2023-03-08 14:03:41 +08:00
CloudCanal 社区版
wxw752
2023-03-08 14:04:19 +08:00
flink-cdc

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

https://www.v2ex.com/t/922102

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

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

© 2021 V2EX