Mysql数据实时同步到Es上

同步方案

① 同步双写

同步双写实一种数据同步策略,它指的是在主数据库(如mysql) 上进行数据修改操作,同时将这些修改同步写入到ES 中,这种策略旨在确保两个数据库之间的数据一致性,并且优化系统的读写性能。

目标

同步双写是指在进行数据写入操作的时候,同时向两个或者多个数据库写入相同的数据,在mysql 与Ed 的同步场景中,其主要目的是将mysql 的业务数据实时同步到es 中,以便利用ES 的高效查询能力来应对复杂的查询需求,同时减轻mysql的查询压力。

实现方式

直接同步

在业务代码中,每次对mysql 数据库进行写入操作的时候,同时执行对ES的写入操作,这种方式简单直接,但可能增加代码的复杂性和出错的风险。

利用中间件

利用消息队列(如 kafka) 、数据变更捕获工具(如 Debezium) 或者ETL 工具(如Logstash) 等中间件来捕获Mysql 的数据变更事件,并将这些事件转发到ES 进行同步。这种方式可以解耦业务代码与数据同步逻辑,提高系统的可扩展性和可维护性。

触发器与存储过程

在mysql 中设置触发器或者编写存储过程,在数据发生变更的时候自动触发ES的写入操作,这种方式可以减少业务代码的侵入性,但可能会增加Mysql的负担并影响性能。

优缺点

优点:

① 业务逻辑编写简单

② 业务查询实时性高

缺点

① 业务硬编码,有需要写入mysql 的地方都需要添加写入Es 的代码

② 业务代码强耦合度很高

③ 存在双写失败丢数据的风险。

应用场景

同步双写策略适用于对数据一致性要求较高且需要优化查询性能非场景,例如,在电商系统中,可以将商品信息、订单数据等存储在mysql 中,同时将这些数据同步到ES 中用于以支持复杂的搜索和分析需求。

② Logstash 同步

Logstash 是一个开源的服务端数据处理管道,可以同时从多个来源采集数据,转化数据,然后将数据发送到您指定的存储库中,在实现mysql 数据库和Elasticsearch 之间的数据同步是,Logstash 可以发布重要作用

优缺点

优点:

① 不改变原有代码,没有侵入性、没有硬编码。

② 没有业务强耦合,不改变原来程序的性能。

缺点

① 时效性差,由于是采用定时器根据固定频率查询表来同步数据,尽管将同步周期设置到秒级,也还是会存在一定时间的延迟。

② 对数据库有一定的轮询压力,一种改进方法是将轮询放到压力不大的从库上。

③ 无法实现同步删除,需要在Elasticsearch 中执行相关命令手动删除

④ Elasticsearch 中的_id 字段必须与Mysql 中的id 字段相同。

canal 数据同步(最优)

使用canal模拟成Mysql 的slave, 实时接收Mysql 的增量数据binlog, 然后通过Restful API 将数据写入到阿里云ES 实例或者Es Serverless 应用中,适用于对数据同步的实时性要求较高的场景。

同步原理:

canal 原理急救室伪装成Mysql 的从节点,从而订阅master 的节点binlog 日志,通过订阅binlog 方式实现数据实时同步,在不影响源数据库的情况下,同步延迟可降低至毫秒级别。

同步流程

① Canal 服务端向mysql 的master 节点传输dump 协议。

② mysql 的master 节点接收到dump 请求后推送binlog 日志给canal服务端,解析binlog对象(原始为byte 流) 转成json 格式。

③ canal 客户端通过TCP 协议或者MQ 形式监听Canal 服务端,同步数据到ES

相关推荐
Elastic 中国社区官方博客6 分钟前
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
隔壁老王15611 分钟前
mysql实时同步到es
数据库·mysql·elasticsearch
想要打 Acm 的小周同学呀34 分钟前
Redis三剑客解决方案
数据库·redis·缓存
rkmhr_sef35 分钟前
Redis 下载与安装 教程 windows版
数据库·windows·redis
SunnyRivers2 小时前
关于ES中text类型时间字段范围查询的结构化解决方案
elasticsearch·时间·text·范围查询
库库林_沙琪马2 小时前
Redis 缓存穿透、击穿、雪崩:问题与解决方案
数据库·redis·缓存
API_technology2 小时前
电商搜索API的Elasticsearch优化策略
大数据·elasticsearch·搜索引擎
Hanson Huang3 小时前
【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较
redis·mysql·mongodb·es
黄雪超3 小时前
大数据SQL调优专题——引擎优化
大数据·数据库·sql
LUCIAZZZ3 小时前
EasyExcel快速入门
java·数据库·后端·mysql·spring·spring cloud·easyexcel