MySQL与ES数据同步的四种方案及实践演示

文章目录

一、同步双写

也就是同步调用,这是一种最为简单的方式,在将数据写到mysql时,同时将数据写到ES。

优点

1.业务逻辑简单

2实时性高

缺点

1.硬编码,有需要写入mysql的地方都需要添加写入ES的代码

2.业务强耦合

3.存在双写失败丢数据风险

4.性能较差:本来mysql的性能不是很高,再加一个ES,系统的性能必然会下降。

双写失败风险

ES系统不可用;

程序和ES之间的网络故障;

程序重启,导致系统来不及写入ES等。

针对这种情况,有数据强一致性要求的,就必须双写放到事务中来处理,而一旦用上事物,则性能下降更加明显。

项目演示

请移步:MySQL与ES数据同步之同步调用

二、异步双写(MQ方式)

针对多数据源写入的场景,可以借助MQ实现异步的多源写入,这种情况下各个源的写入逻辑互不干扰,不会由于单个数据源写入异常或缓慢影响其他数据源的写入,虽然整体写入的吞吐量增大了,但是由于MQ消费是异步消费,所以不适合实时业务场景。

优点

性能高

不易出现数据丢失问题,主要基于MQ消息的消费保障机制,比如ES宕机或者写入失败,还能重新消费MQ消息。

多源写入之间相互隔离,便于扩展更多的数据源写入

缺点

硬编码问题,接入新的数据源需要实现新的消费者代码

系统复杂度增加:引入了消息中间件

可能出现延时问题:MQ是异步消费模型,用户写入的数据不一定可以马上看到,造成延时。

项目演示

请移步:MySQL与ES数据同步之异步调用

三、基于Datax同步

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

核心组件

Reader:数据采集模块,负责从源采集数据

Writer:数据写入模块,负责写入目标库

Framework:数据传输通道,负责处理数据缓冲等

以上只需要重写Reader与Writer插件,即可实现新数据源支持

从一个JOB来理解datax的核心模块组件:

datax完成单个数据同步的作业,称为Job,job会负责数据清理、任务切分等工作;

任务启动后,Job会根据不同源的切分策略,切分成多个Task并发执行,Task就是执行作业的最小单元

切分完成后,根据Scheduler模块,将Task组合成TaskGroup,每个group负责一定的并发和分配Task

架构图

支持的数据源及操作



项目演示

请移步:DataX实现Mysql与ElasticSearch(ES)数据同步

四、基于Binlog实时同步

实现原理

具体步骤如下:

读取mysql的binlog日志,获取指定表的日志信息;

将读取的信息转为MQ;

编写一个MQ消费程序;

不断消费MQ,每消费完一条消息,将消息写入到ES中。

优点

没有代码侵入、没有硬编码;

原有系统不需要任何变化,没有感知;

性能高;

业务解耦,不需要关注原来系统的业务逻辑。

缺点

构建Binlog系统复杂;

如果采用MQ消费解析的binlog信息,也会像方案二一样存在MQ延时的风险。

业界目前较为流行的方案:使用canal监听binlog同步数据到es

项目演示

请移步:
Docker部署Canal监听MySQL binlog
SpringBoot整合Canal实现MySQL与ES数据同步


结束~

相关推荐
代码栈上的思考1 小时前
SpringBoot 拦截器
java·spring boot·spring
AI_56781 小时前
阿里云OSS成本优化:生命周期规则+分层存储省70%
运维·数据库·人工智能·ai
送秋三十五2 小时前
一次大文件处理性能优化实录————Java 优化过程
java·开发语言·性能优化
choke2332 小时前
软件测试任务测试
服务器·数据库·sqlserver
龙山云仓2 小时前
MES系统超融合架构
大数据·数据库·人工智能·sql·机器学习·架构·全文检索
雨中飘荡的记忆2 小时前
千万级数据秒级对账!银行日终批处理对账系统从理论到实战
java
IT邦德2 小时前
OEL9.7 安装 Oracle 26ai RAC
数据库·oracle
jbtianci2 小时前
Spring Boot管理用户数据
java·spring boot·后端
Sylvia-girl2 小时前
线程池~~
java·开发语言
编程彩机2 小时前
互联网大厂Java面试:从Jakarta EE到微服务架构的技术场景深度解读
spring boot·分布式事务·微服务架构·java面试·jakarta ee