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 。 [缺点] :网上的资料较少。

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

6173 次点击
所在节点    程序员
68 条回复
j1132888093
2023-03-08 14:05:50 +08:00
@newskillsget 先写 mysql ,再写 es ,失败就回滚 mysql 。如果是写完 es 再抛出异常的话,就要手动回滚 es 了,但是我们公司这种场景目前很少,还能 cover 住
potatowish
2023-03-08 14:14:14 +08:00
@changdy 第二个
fengpan567
2023-03-08 14:17:38 +08:00
canal 监听 binlog ,kafka 消费写入 es
noparking188
2023-03-08 14:34:37 +08:00
CDC 到队列,自己写程序或者 lambda 写 ES ,可行吗,是不是更简单一点?
我之前的公司是双写+重试,错了人肉纠正
BQsummer
2023-03-08 14:48:36 +08:00
前段时间调研过 doris 的数据同步:
canal 文档一坨屎, 很多参数得从源代码里找, 数据量大的话会有坑
flink cdc 开发最省事, 但是集群运维费事
debezium 中文文档为 0, flink cdc 最早的同步方式是通过它, 后来自己实现了一套
CloudCanal 是 starrocks 文档里推荐的, 国产, 还不开源, 不敢用
其实上云是最省力的方式
SoulSleep
2023-03-08 14:51:09 +08:00
@jiobanma #30 历史数据 canal 支持一次性迁移,类似 etl
@v2e0xAdmin2 #37 麻烦在哪儿呢?我们用 canal-admin 管理配置,指标暂时没输出到 grafana...监控主要关注业务异常,主要是稳定,基本上没出过问题
dabai0806
2023-03-08 15:00:47 +08:00
logstash 其实是可以配置秒级同步的(这也是我碰巧试出来的 文档和网上文章都没看到有人提过)

线上几万条数据, 我配置的是 10 秒同步一次 就是同步的时候 cpu 会上飙百分之 30 左右

配置参数
schedule => "*/10 * * * * *"
dabai0806
2023-03-08 15:02:51 +08:00
logstash 维护方便些同步数据的自由度也高 写条查询 sql 就完事了, canal 就是个半成品, 难用的要死
lueluev
2023-03-08 15:09:08 +08:00
好熟悉的问题 flume 还有人用吗
fridaycatye
2023-03-08 15:36:24 +08:00
datax 可用,基于查询做同步,灵活
fishtocat
2023-03-08 17:56:52 +08:00
学习了,我们现在是基于 canal 自己实现的 golang 客户端消费更新信息
liprais
2023-03-08 17:57:50 +08:00
flink-cdc 开 ckpt 完事
ufo5260987423
2023-03-08 18:00:16 +08:00
我不知道您为啥说 logstash 效率低,不论是全量更新还是增量更新,效率都还不错。我处理过的专利数据大概几百个 G ,都能在可接受时间内完成任务。

如果需要实时更新,那么在事物里面同步操作 es 就好了。
可能我了解的还不够多,请您指正。
ffkjjj
2023-03-08 18:02:55 +08:00
debezium
awalkingman
2023-03-08 18:08:47 +08:00
@j1132888093 人工补偿兜底,很真实了。巧妙的人工介入能极大地降低系统复杂度,谓之四两拨千斤。
v2e0xAdmin2
2023-03-08 18:11:39 +08:00
@SoulSleep 加机器麻烦
zhangxudong
2023-03-08 18:34:21 +08:00
可以试试阿里云 DTS 原班人马搞的 cloudcanal
HunterPan
2023-03-08 19:13:18 +08:00
datax
vgbhfive
2023-03-08 19:33:23 +08:00
datax 可以考虑下
GopherDaily
2023-03-08 19:53:58 +08:00
kafka connect, 如果你们已经有 kafka 的话,
debezium + es sink 吧

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

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

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

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

© 2021 V2EX