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

附件

文章基于以下学习所得:


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

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

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

谢谢支持!

相关推荐
.Hypocritical.4 分钟前
MySQL |常用 SQL 语句与 pymysql 函数
mysql
mister_guo29 分钟前
Elasticsearch:原理、Docker 安装与常用命令
大数据·运维·elasticsearch
NineData36 分钟前
MySQL 到 Doris 实时数据同步:订单、用户和日志数据入仓方案
数据库·mysql
考研保研资料分享2 小时前
计算机保研经验合辑:跨控制与浙大直博,预推免复习、论文复现及导师沟通(2025)
面试
Dovis(誓平步青云)2 小时前
现场问题先关闭还是先验收,建筑任务怎样处理依赖
前端·javascript·数据库·mysql·音视频
xuefuhe3 小时前
MySQL:group_replication_start_on_boot vs group_replication_bootstrap_group
mysql
怕浪猫3 小时前
12个UI组件库,Star最低的下载最多
前端·javascript·面试
for_ever_love__3 小时前
MySQL Online DDL 完全指南:INSTANT/INPLACE/COPY 三种算法、MDL 锁事故与 gh-ost 实战
数据库·mysql·ddl·online·gh-ost·锁表·加字段
熊猫钓鱼>_>3 小时前
面试出现 606 次的第 K 大,被拆成三个问题问
算法·面试·职场和发展·校招·面经·oj·ai生成
for_ever_love__3 小时前
MySQL 子查询、派生表与 CTE 优化:半连接、物化和递归实战
数据库·mysql·优化·as·子查询·with·cte