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

文章目录

  • 一、同步双写
    • 优点
    • 缺点
    • 双写失败风险
    • 项目演示
  • 二、异步双写(MQ方式)
    • 优点
    • 缺点
    • 项目演示
  • 三、基于Datax同步
    • 核心组件
    • 架构图
    • 支持的数据源及操作
    • 项目演示
  • 四、基于Binlog实时同步
    • 实现原理
    • 优点
    • 缺点
    • 项目演示

一、同步双写

也就是同步调用,这是一种最为简单的方式,在将数据写到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数据同步


结束~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/130677.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

切分支解决切不走因为未合并的路径如何解决

改代码的时候改做分支了,本来是在另一个分支上面改代码,结果改到另一个放置上面,然后想着使用git stash进行保存,然后切到另外一个分支再pop,结果不行。 报这个错误,导致切不过去,因为我这边pop…

TCP的滑动窗口与拥塞控制

客户端每发送的一个包,服务器端都应该有个回复,如果服务器端超过一定的时间没有回复,客户端就会重新发送这个包,直到有回复。 为了保证顺序性,每一个包都有一个 ID。在建立连接的时候,会商定起始的 ID 是什…

3D虚拟数字人定制,推动传统文化传播新高度

“数字人”成为“汉语盘点2022”年度十大新词语。伴随着科技发展成长的年轻人逐渐成为消费主力军,如何在虚拟世界与年轻一代用户互动以抓住95后年轻人受众,成为不少传统文化品牌发力的重点。 数字人“天妤”,在3D虚拟数字人定制中&#xff0…

免费的代码审查工具你知道这几个就够了?新手程序员必读

代码质量关系到一个项目的好坏,一直以来都是程序员和项目经理所关心的事情,在之前代码的检查用于人工或者静态页面,再后来就会用的各种工具来做因为不良的代码不仅会影响代码的可维护性,而且还会在某些情况下影响其性能。此外&…

已解决selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain: Cookie ‘

已解决selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain: Cookie ‘domain’ mismatch 文章目录 报错问题报错翻译报错原因解决方法千人全栈VIP答疑群联系博主帮忙解决报错 报错问题 粉丝群里面的一个小伙伴遇到问题跑来私信我&#…

从构建者到设计者的低代码之路

低代码开发技术,是指无需编码或通过少量代码就可以快速生成应用程序的工具,一方面可降低企业应用开发人力成本和对专业软件人才的需求,另一方面可将原有数月甚至数年的开发时间成倍缩短,帮助企业实现降本增效、灵活迭代。那么&…

【80天学习完《深入理解计算机系统》】第十五天 4.1 Y86-64指令集与Verilog HDL

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示:重难点★✔ 蓝色文字表示:思路以及想法★✔   如果大家觉得有帮助的话,感谢大家帮忙 点…

rsync远程同步+inotify监控

目录 一、Rsync 简介 1、rsync是什么 2、备份的方式 3、rsync同步方式 4、常用rsync命令 5、配置源的两种表达方法 二、rsync实验 1、本地复制 ​编辑​编辑 2、异地复制 2.1 rsync服务器配置 2.2 rsync客户端配置 2.2.1 普通同步 2.2.2 免密同步 2.2.3 --delet…

Linux基础命令(示例代码 + 解释)

查看目录下文件 ls [-a -l -h] [路径] -a(全部) -l(细节) -h(大小) ls ls / ls -a ls -l ls -h ls -alh ls -l -h -a ls -lah /切换目录 cd [路径] change di…

使用 System.exit() 来优雅地终止 Spring Boot 项目

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: 使用 System.exit() 来优雅地终止 Spring Boot 项目 ⏱️ 创作时间&am…

IIS解析漏洞复现

文章目录 漏洞复现总结 漏洞复现 打开虚拟机,在C:\inetpub\wwwroot\8000_test目录下放一个phpinfo.php文件: 在服务器管理器中打开IIS管理器,选择处理映射程序: 点击添加模块映射: 配置映射模板,php文件…

【猿灰灰赠书活动 - 06期】- 【计算机考研书单——408专属】

👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨‍💻本文简述:博文为大家争取福利,与机械工业出版社合作进行送书活动 👨‍&#x1f…

​消费盲返模式:一种让消费者和商家都受益的新型消费返利模式

您是否想过,如果您的消费能够带来意想不到的回报,您会不会更愿意购买商品或服务呢?您是否想过,如果您的商品或服务能够吸引更多的消费者,并让他们成为您的忠实客户,您会不会更有动力经营您的业务呢&#xf…

一百七十四、Hive——Hive动态分区表加载数据时需不需要指定分区名?

一、目的 在Hive的DWD层和DWS层建立动态分区表后,发现动态插入数据时可以指定分区名,也可以不指定分区名。因此,研究一下它们的区别以及使用场景,从而决定在项目的海豚调度HiveSQL的脚本里需不需要指定动态分区的分区名&#xff…

【数据结构】长篇详解堆,堆的向上/向下调整算法,堆排序及TopK问题

文章目录 堆的概念性质图解 向上调整算法算法分析代码整体实现 向下调整算法算法分析整体代码实现 堆的接口实现初始化堆销毁堆插入元素删除元素打印元素判断是否为空取首元素实现堆 堆排序创建堆调整堆整合步骤 TopK问题 堆的概念 堆就是将一组数据所有元素按完全二叉树的顺序…

记录一次Docker与Redis冲突

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 报错以及Bug ✨特色专栏: …

避坑之路 —— 前后端 json 的注意问题

当我们在进行开发项目的时候,在前后端需要进行数据之间的传输,那么就会需要到json。而json算是字符串中的一种 1.先说一下前端的, 其实这两种都是表示前端希望能收到后端json这样的数据格式,那么我们在后端就需要注意将数据进行转换为json进…

深度学习模型复杂度分析大杂烩

深度学习模型复杂度分析大杂烩 时间复杂度和空间复杂度是衡量一个算法的两个重要指标,用于表示算法的最差状态所需的时间增长量和所需辅助空间. 在深度学习神经网络模型中我们也通过: 计算量/FLOPS(时间复杂度)即模型的运算次数 访存量/By…

数据结构与算法基础-学习-34-基数排序(桶排序)

目录 一、基本思想 二、算法思路 1、个位排序 (1)分配 (2)收集 2、十分位排序 (1)分配 (2)收集 三、源码分享 1、InitMyBucket 2、DestroyMyBucket 3、ClearMyBucket 4、…

软件测试/测试开发丨使用ChatGPT自动进行需求分析

简介 在实际工作过程中,常常需要拿到产品的PRD文档或者原型图进行需求分析,为产品的功能设计和优化提供建议。 而使用ChatGPT可以很好地帮助分析和整理用户需求。 实践演练 接下来,需要使用ChatGPT 辅助我们完成需求分析的任务 注意&…