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

附件

文章基于以下学习所得:


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

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

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

谢谢支持!

相关推荐
b78gb2 小时前
电商秒杀系统设计 Java+MySQL实现高并发库存管理与订单处理
java·开发语言·mysql
奥尔特星云大使2 小时前
CentOS 7 安装 MySQL 8
mysql·centos·mysql 8
lang201509283 小时前
MySQL FIPS模式:安全合规全解析
mysql
一只叫煤球的猫5 小时前
建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个
后端·mysql·性能优化
jianghx10246 小时前
Docker部署ES,开启安全认证并且设置账号密码(已运行中)
安全·elasticsearch·docker·es账号密码设置
yumgpkpm7 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
程序员云帆哥8 小时前
MySQL JDBC Driver URL参数配置规范
数据库·mysql·jdbc
三三木木七10 小时前
mysql拒绝连接
数据库·mysql
唐古乌梁海10 小时前
【mysql】InnoDB的聚簇索引和非聚簇索引工作原理
数据库·mysql
꒰ঌ 安卓开发໒꒱10 小时前
Mysql 坏表修复
android·mysql·adb