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

news2024/11/27 1:36:21

文章目录

  • 一、同步双写
    • 优点
    • 缺点
    • 双写失败风险
    • 项目演示
  • 二、异步双写(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.coloradmin.cn/o/1004973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IPIDEA动态代理IP更适合于哪些业务场景?为什么动态代理IP更经济实惠?

动态代理IP是一种非常有用的工具,在许多业务场景中发挥重要作用。动态代理IP可以帮助用户提高网络速度和稳定性,提高工作效率,对于需要进行跨境业务的企业和个人来说尤为重要。 让我们先来看看动态代理IP更适合于哪些业务场景。 1.数据采集…

StraUML的详细使用步骤

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于JRebel & XRebel的相关操作吧 下载和安装:首先,你需要从StarUML的官方网站或适用于你操作系统的应用商店下载并安装StarUML软件Sta…

人工智能:神经细胞模型到神经网络模型

人工智能领域中的重要流派之一是:从神经细胞模型(Neural Cell Model)到神经网络模型(Neural Network Model)。 一、神经细胞模型 第一个人工神经细胞模型是“MP”模型,它是由麦卡洛克、匹茨合作&#xff0…

基于spingboot的websocket订阅、广播、多人聊天室示例

概述 基于spingboot的websocket多人聊天系统。包括订阅,广播、点对点单人聊天,多人聊天室功能。 详细 一、运行效果 简单示例 广播 单人聊天 多人聊天室 二、相关代码 websocket配置 package com.iamgpj.demowebsocket.config;import com.iamgpj.d…

更大的数据库,更多的分析内容!凌恩明星产品鱼类eDNA产品再次大升级!!

喜大普奔,凌恩生物明星产品鱼类eDNA产品再次大升级!自建鱼类数据库,本次升级获得了更大的数据库,更全面的物种分类,更多的分析内容,鱼类物种检测更加精准!! eDNA宏条形码技术在鱼类…

移植FlashDB、SFUD到STM32f407

个人上篇文章 搭建STM32F407的SPI-Flash(基于STM32CubeMX)_小刚学長的博客-CSDN博客 主要是解决STM32CubeMX这边的配置,对code端侧是简单介绍了下 实际项目上一般都是拿片外flash存储一些东西,比如一些比较多的配置、参数&…

stu01-IDEA怎么创建一个HTML项目

1.打开idea,依次点击file→new→project 2.点击Java,选择你的jdk,没有下载的点击“Download JDK”/已经下载有JDK但在这里没显示的→点击“Add JDK”,选择你安装的JDK的路径,然后next 3.next 4.起好名字,我…

Python之OS模块

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;即os模块提供了非常丰富的方法用来处理文件和目录。 使用的时候需要导入该模块:import os

【数据结构】树的基础知识及三种存储结构

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

定时任务执行脚本

1、编写bat脚本 将newman运行测试集的命令编写为bat脚本保存 2、设置定时任务 在计算机上右键->管理,在弹出菜单里的任务计划程序里创建定时任务配置执行

MySQL 8.0 驱动与阿里druid版本兼容操作

注意&#xff1a;这个异常表面druid数据源的版本与MySql 8.0的驱动版本不匹配&#xff0c;解决方法如下&#xff1a; 确保MySql 8.0的驱动如下网址&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifact…

c语言练习题52:写一个函数判断当前机器是大端还是小端

代码&#xff1a; #include<stdio.h> int check_sys() {int a 1;return *(char*)&a;//小端retrun 1 大端return 0&#xff1b; } int main() {if (check_sys() 1) {printf("小端\n");}elseprintf("大端\n"); } 这里首先取a的地址&#xff0c…

腾讯云服务器怎么样?详细说下站长的看法

购买云服务器首选腾讯云&#xff0c;腾讯云服务器怎么样&#xff1f;作为国内头部原厂商的腾讯云&#xff0c;云服务器无论从安全性、可靠性和速度方面都有很好的保证&#xff0c;腾讯云服务器网来详细说下腾讯云服务器的优势以及腾讯云服务器购买流程&#xff1a; 目录 腾讯…

vscode-server

1know_host清除 2 删除服务器里的home/user/.vscode-server&#xff08;不是根root下的vscode-server&#xff09;&#xff0c;删除时用户名保持一致。 3 ssh配置文件 /etc/ssh/sshd_config[想改变,使用root&#xff0c;修改文件权限] 4 删除修改后&#xff0c;重启Windows下…

夯实思想根基:建行江门市分行持续加强党建工作

建行广东省江门市分行深化落实新时代党的建设总要求&#xff0c;坚持不懈用先进思想武装头脑和凝心铸魂&#xff0c;强化党建工作&#xff0c;夯实思想根基&#xff0c;护航高质量发展。 我是党员我先学 理论学习是党员的“永恒课题”。建行江门分行全体党员干部依托数字党建平…

【Linux学习笔记】基础命令3

1. find命令2. which命令3. alias命令4. whereis命令5. grep命令6. zip和unzip6.1. zip命令6.2. unzip命令 7. tar命令8. 命令行解释器 1. find命令 用法&#xff1a;find 路径名称 -name 文件名功能&#xff1a;可以在指定的路径下&#xff0c;找出所有与文件名相匹配的文…

常用百宝箱——日志处理

目录 前言 一、logging库 二、logging日志等级 三、logging四大组件 四、封装示例 总结 前言 日志是记录特定时间段或事件的详细信息的文件或记录。它们通过时间戳和关键词或描述符来标识事件或行动。日志可以用于许多目的&#xff0c;例如&#xff1a;故障排除、网络安全…

排产中的两种对立策略 - 负载均衡与成本最优

在APS系统设计中&#xff0c;根据不同的业务场景&#xff0c;会出现两种截然相反的策略需求&#xff0c;分别是(资源)负载均衡与成本最优(最低)&#xff0c;两种策略分别适用于不同的业务场景。本文我们将这两种策略的适用场景、方案原理作初步探讨&#xff0c;并就这些策略在O…

SpringBoot项目--电脑商城【确认订单】

1.持久层[Mapper] 1.1规划需要执行的SQL语句 用户在购物车列表页中通过随机勾选相关的商品,在点击"结算"按钮后跳转到"确认订单页",在这个页面中需要展示用户在上个页面所勾选的"购物车列表页"中对应的数据.说白了也就是列表展示,且展示的内容还…

solidworks底部状态栏显示不出来

如下图所示&#xff0c;solidworks主界面下面的状态栏突然不见了。 怎么调出来&#xff1f; 第一步&#xff1a;点击视图菜单&#xff0c;用户界面&#xff0c;把状态栏前的勾勾上。 第二步&#xff1a;把视图下面的触摸模式关掉&#xff0c;这一点很容易被大家忽略。