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

2023-09-12 17:44:09

一、同步双写

也就是同步调用,这是一种最为简单的方式,在将数据写到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.分布式任务调度对一个视频的转码可以理解为一个任务的执行,如果视频的数量比较多,如何去高效处理一批任务呢?1、多线程多线程是充分利用单机的资源。2、分布式加多线程充分利用多台计算机,每台计算机使用多线程处理。方案2可扩展性更强。方案2是一种分布式任务调度的处理方案。什么是分布式任务调度?我们可以先思考一下下面业务场景

排序(希尔、快速、归并排序)

文章目录1.排序的概念及其运用2.插入排序3.选择排序文章内容1.排序的概念及其运用1.1排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i

Mybatis常见面试题总结

梳理面试过程中Mybatis相关的常见问题。为保证知识点覆盖,参考了《Mybatis从入门到精通》、《深入浅出Mybatis技术原理与实战》、《Mybatis技术内幕》等书籍。Mybatis简介Mybatis是一款优秀的持久层框架(ORM框架),它支持自定义SQL、存储过程以及高级映射。Mybatis免除了几乎所有的J

2023 Google 开发者大会:Web平台新动向

目录前言一、OpeninWordPressplayground二、WebGPU三、新的核心Web指标INP四、Webview1、CustomTabs2、JavaScriptEngine五、Passkeys六、ViewTransitionsAPI七、GoogleChrome开发者工具优化1、覆盖HTTP的响应标头2、改变

《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

「作者主页」:士别三日wyx「作者简介」:CSDNtop100、阿里云博客专家、华为云享专家、网络安全领域优质创作者「推荐专栏」:小白零基础《Python入门到精通》朴素贝叶斯1、朴素贝叶斯API2、朴素贝叶斯算法实际应用2.1、获取数据集2.2、划分数据集2.3、特征归一化2.4、贝叶斯算法处理并评估3、常见问题4、

大数据-Hive

Hive简介Hive是基于Hadoop的一个【数据仓库工具】,可以将结构化和半结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能。因为比直接用MapReduce开发效率更高,Hive的主要作用就是用来做离线数据分析。本质是:将HQL转化成MapReduce程序特点可扩展性Hive可以自由的扩展集群的规模,一

Mybatis深度解析:从起源到现代应用的全景视角

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

C语言天花板——指针(初阶)

🌠🌠🌠大家在刚刚接触C语言的时候就肯定听说过,指针的重要性以及难度等级,以至于经常“谈虎色变”,但是今天我来带大家走进指针的奇妙世界。🎇🎇🎇一、什么是指针🤔指针理解的两个要点:1️⃣指针是内存中一个最小单元的编号,也就是地址2️⃣平常口语中说的指针,通常指的是指针变量,是用来存放地址的变量数据存储在内存中

Java基于SpringBoot的藏区特产销售系统的研究与实现

今天为大家带来的是基于Java+SpringBoot+Vue的藏区特产销售系统,大家有兴趣的可以看一下博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文章目录1.简介2.主要技术3功能分析4系统分析5

RabbitMQ 几种模式

一、HelloWorld模式在这一部分中,我们将用Java编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。模型如下所示:在下图中,“P”是我们的生产者,“C”是我们的消费者。中间的框是一个队列RabbitMQ代表使用者保留的消息缓冲区。1.1生产者1.1.1添加依赖<!--指定jdk编译版本--><bu

Weblogic SSRF 漏洞复现

SSRF实例WeblogicSSRF到GetShell​Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。测试环境搭建编译及启动测试环境sudodockercomposeup-d访问http://10.9.75.58:7001/console

热文推荐