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、配置数据库地址
2、配置对应规则
这里其实是可以在一个配置文件中配置多组对应关系如:
但是为了保证稳定性与逻辑清晰,我们可以一个配置文件只配置一组对应关系,需要同步多张表时拆分成多个任务就行了。
3、配置字段匹配规则
4、支持指定字段(同步需要同步的字段)
5、支持数据预处理
这里的支持方式是通过ES的管道来实现的
总结:
该中间件还是非常好用的,即使mysql在高并发的情况下,数据依旧可以秒级同步到es中。我司已长期在生产环境中使用,并未发现异常。
我司经过二开,目前还支持配置只插入或只更新或只删除(其实就是解析binlog的时候过滤一下)
前段时间由于将elasticsearch7.x升级到8.x导致该中间件无法使用,原因是es8.x已取消type,但是市面上大多数mysql同步es的中间件都还未作处理(canal也是),所以再次二开,目前也支持同步到es8。
还是那句学的越多会的越少,在我有mysql同步数据的需求时,别人已经在多年前就开发好了相关中间件。只能说站在大牛的肩膀上,向更多小伙伴分享了