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数据同步


结束~

相关推荐
mldong3 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾13 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
zhanghe6874 小时前
es的密码带有特殊字符,导出
java
pnoker4 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy4 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
天远数科5 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
步行cgn5 小时前
YAML 的语法规则
spring boot·后端
Mr.朱鹏5 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
骇客野人5 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记