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 的实时性和稳定性都比较高,对于更多的企业来说都会选择这种方案。

附件

文章基于以下学习所得:


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

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

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

谢谢支持!

相关推荐
XQ丶YTY6 分钟前
大二java第一面小厂(挂)
java·开发语言·笔记·学习·面试
天空之城夢主19 分钟前
shell 编程之正则表达式与文本处理器
数据库·mysql·正则表达式
进击的CJR1 小时前
MySQL 8.0 OCP 英文题库解析(三)
android·mysql·开闭原则
面试官E先生2 小时前
【极兔快递Java社招】一面复盘|数据库+线程池+AQS+中间件面面俱到
java·面试
JhonKI2 小时前
【MySQL】变更缓冲区:作用、主要配置以及如何查看
数据库·mysql
会飞的架狗师2 小时前
【SpringBoot实战指南】集成Easy ES
spring boot·elasticsearch
老李不敲代码2 小时前
榕壹云打车系统:基于Spring Boot+MySQL+UniApp的开源网约车解决方案
spring boot·mysql·微信小程序·uni-app·软件需求
Elastic 中国社区官方博客4 小时前
在 Elasticsearch 中删除文档中的某个字段
大数据·数据库·elasticsearch·搜索引擎
杨凯凡4 小时前
MySQL入门指南:环境搭建与服务管理全流程
数据库·mysql
forestsea5 小时前
MySQL 入门大全:数据类型
数据库·mysql