MySQL篇:MySQL如何实时同步到ES

MySQL如何实时同步到ES

😄生命不息,写作不止

🔥 继续踏上学习之路,学之分享笔记

👊 总有一天我也能像各位大佬一样

🏆 博客首页 @怒放吧德德 To记录领地 @一个有梦有戏的人

🌝分享学习心得,欢迎指正,大家一起学习成长!

转发请携带作者信息 @怒放吧德德(掘金) @一个有梦有戏的人(CSDN)

需求

在使用 MySQL 的时候,由于数据量比较大,会将其存储到 ES 中,那么这里就会涉及到,要如何设计方案,使得 MySQL 能够实时的同步到Elasticsearch。

对于这个需求,在数据变化的瞬间,要能够及时地反映到另一个系统。对 MySQL 与 ES 的实时同步场景,需要考虑能够保持数据的一致性和实时性。

方案

双写

要让 MySQL 与 ES 实时同步,可以考虑使用双写的方案,当 MySQL 进行修改数据的时候同时更新到 elasticsearch 中。对于这种方案,耦合度会很高,当需求变更的时候,维护成本就会比较高。

消息队列的异步同步

也就是当数据发生变更的时候,触发 MQ 消息,再通过消费端去订阅消息,进行同步到 elasticsearch 中。这种方案能够降低系统的耦合度,也能够有可靠性消息队列来保障,还能够在同步失败的时候自动重试;但是引入了三方组件,系统复杂度会增加。

使用Binlog解析工具

可以通过工具来进行解析Binlog并输出变更事件。

Canal

canal 是阿里开源的组件,其工作原理是去监听 MySQL 中的 binlog 日志(Canal 的工作机制基于 MySQL 主从同步原理),通过捕获数据变更事件,在实时推送存储到 elasticsearch 中。这个方式和 MQ 的方式有点像,就是不需要嵌入到业务系统中。

工作原理:

  • 伪装 Slave:Canal 模拟 MySQL Slave 协议,向 Master 发送 Dump 请求,接收 Binlog 增量日志;
  • 解析与分发:解析 Binlog 日志(支持 Statement、Row、Mixed 格式,推荐 Row 模式以保证数据一致性),将其转换为结构化事件,通过消息队列(如 Kafka)或直接推送至下游系统
Debezium

Debezium 是一个开源的分布式平台,能够通过解析 MySQL 的 Binlog 实时捕获数据变更,并将变更事件通过 Kafka 传递到下游系统(如 Elasticsearch)。

总结

实时将 MySQL 数据同步到 elasticsearch 中,以上介绍了几种方案,具体需要哪种方案,需要通过综合业务需求进行考虑,通过系统架构、数据量来决定使用何种方案。canal 和 MQ 的实时性和稳定性都比较高,对于更多的企业来说都会选择这种方案。

附件

文章基于以下学习所得:


转发请携带作者信息 @怒放吧德德 @一个有梦有戏的人

持续创作很不容易,作者将以尽可能的详细把所学知识分享各位开发者,一起进步一起学习。转载请携带链接,转载到微信公众号请勿选择原创,谢谢!

👍创作不易,如有错误请指正,感谢观看!记得点赞哦!👍

谢谢支持!

相关推荐
我该如何取个名字1 小时前
Mac mini 安装mysql数据库以及出现的一些问题的解决方案
数据库·mysql·macos
_一条咸鱼_1 小时前
Python 名称空间与作用域深度剖析(二十七)
人工智能·python·面试
_一条咸鱼_1 小时前
Python之函数对象+函数嵌套(二十六)
人工智能·python·面试
_一条咸鱼_1 小时前
Python 文件操作之修改(二十二)
人工智能·python·面试
_一条咸鱼_1 小时前
Python 闭包函数:原理、应用与深度解析(二十八)
人工智能·python·面试
_一条咸鱼_1 小时前
Python 之文件处理编码字符(二十)
人工智能·python·面试
_一条咸鱼_1 小时前
Android嵌套滑动详解
android·面试·android jetpack
_一条咸鱼_2 小时前
Python 装饰器:代码功能的优雅增强(二十九)
人工智能·python·面试
_一条咸鱼_2 小时前
Python 文件处理(二十一)
人工智能·python·面试
_一条咸鱼_2 小时前
Python函数的基本使用(二十三)
人工智能·python·面试