MySQL表数据需要同步到ES索引中怎么办?(转)

2023年 8月 27日 85.5k 0

MySQL实时同步表数据到ES索引

了解了一下还是有很多同学都有类似的需求:
由于业务场景需要,将MySQL的一张表或N张表同步到Elasticsearch中。
毕竟逻辑运算MySQL很强,但是全文检索还歹是ES来。

当然同步的方法很多,业界最常见的就是canal+组件,或通过其他类似管道的组件进行同步。
其原理都相同,就是模拟成从库实时监控MySQL的binlog进行数据处理后发送消息到下游中间件或直达目标组件。

今天给大家推荐一款中间件 “go-mysql-elasticsearch” 下载地址
该中间件为热心大牛开源中间件,其功能强大稳定性高,源码清晰,有golang功底的小伙伴二开也比较轻松。
我们公司虽然也用canal实现很多功能,但是这个go-mysql-elasticsearch相较canal更轻量。可以直接模拟成从库实时监控binlog的变化,同时支持解析mysqldump内容(这点非常优秀,解决了实时同步前增量同步的烦恼),然后直接将解析后的数据写入ES索引中,不再需要其他任何中间件辅助,不过经过测试目前仅支持ES8.X前的写入。

实操

部署起来非常简单,一个zip包,解压即用。
提供了配置文件模板,可按需更改:

1、配置数据库地址

2、配置对应规则

这里其实是可以在一个配置文件中配置多组对应关系如:

但是为了保证稳定性与逻辑清晰,我们可以一个配置文件只配置一组对应关系,需要同步多张表时拆分成多个任务就行了。

3、配置字段匹配规则

4、支持指定字段(同步需要同步的字段)

5、支持数据预处理
这里的支持方式是通过ES的管道来实现的

总结:

该中间件还是非常好用的,即使mysql在高并发的情况下,数据依旧可以秒级同步到es中。我司已长期在生产环境中使用,并未发现异常。
我司经过二开,目前还支持配置只插入或只更新或只删除(其实就是解析binlog的时候过滤一下)

前段时间由于将elasticsearch7.x升级到8.x导致该中间件无法使用,原因是es8.x已取消type,但是市面上大多数mysql同步es的中间件都还未作处理(canal也是),所以再次二开,目前也支持同步到es8。

还是那句学的越多会的越少,在我有mysql同步数据的需求时,别人已经在多年前就开发好了相关中间件。只能说站在大牛的肩膀上,向更多小伙伴分享了

MySQL实时同步表数据到ES索引

了解了一下还是有很多同学都有类似的需求:
由于业务场景需要,将MySQL的一张表或N张表同步到Elasticsearch中。
毕竟逻辑运算MySQL很强,但是全文检索还歹是ES来。

当然同步的方法很多,业界最常见的就是canal+组件,或通过其他类似管道的组件进行同步。
其原理都相同,就是模拟成从库实时监控MySQL的binlog进行数据处理后发送消息到下游中间件或直达目标组件。

今天给大家推荐一款中间件 “go-mysql-elasticsearch” 下载地址
该中间件为热心大牛开源中间件,其功能强大稳定性高,源码清晰,有golang功底的小伙伴二开也比较轻松。
我们公司虽然也用canal实现很多功能,但是这个go-mysql-elasticsearch相较canal更轻量。可以直接模拟成从库实时监控binlog的变化,同时支持解析mysqldump内容(这点非常优秀,解决了实时同步前增量同步的烦恼),然后直接将解析后的数据写入ES索引中,不再需要其他任何中间件辅助,不过经过测试目前仅支持ES8.X前的写入。

实操

部署起来非常简单,一个zip包,解压即用。
提供了配置文件模板,可按需更改:

1、配置数据库地址

MySQL表数据需要同步到ES索引中怎么办?(转)-1

2、配置对应规则

MySQL表数据需要同步到ES索引中怎么办?(转)-2

这里其实是可以在一个配置文件中配置多组对应关系如:

MySQL表数据需要同步到ES索引中怎么办?(转)-3

但是为了保证稳定性与逻辑清晰,我们可以一个配置文件只配置一组对应关系,需要同步多张表时拆分成多个任务就行了。

3、配置字段匹配规则

MySQL表数据需要同步到ES索引中怎么办?(转)-4

4、支持指定字段(同步需要同步的字段)

MySQL表数据需要同步到ES索引中怎么办?(转)-5

5、支持数据预处理
这里的支持方式是通过ES的管道来实现的

MySQL表数据需要同步到ES索引中怎么办?(转)-6

总结:

该中间件还是非常好用的,即使mysql在高并发的情况下,数据依旧可以秒级同步到es中。我司已长期在生产环境中使用,并未发现异常。
我司经过二开,目前还支持配置只插入或只更新或只删除(其实就是解析binlog的时候过滤一下)
MySQL表数据需要同步到ES索引中怎么办?(转)-7
前段时间由于将elasticsearch7.x升级到8.x导致该中间件无法使用,原因是es8.x已取消type,但是市面上大多数mysql同步es的中间件都还未作处理(canal也是),所以再次二开,目前也支持同步到es8。

还是那句学的越多会的越少,在我有mysql同步数据的需求时,别人已经在多年前就开发好了相关中间件。只能说站在大牛的肩膀上,向更多小伙伴分享了

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论