码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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数据同步


    结束~

  • 相关阅读:
    leetcode 热题 100_矩阵置零
    挖掘数据价值,华为云大数据BI解决方案有绝招
    代码随想录算法训练营第11天
    C#算法、排序以及数据结构
    java中的泛型
    我认为除了HelloWorld之外,Python的三大数据转换实例可以作为开始学习Python的入门语言。
    MindFusion.Diagramming for ASP.NET MVC 4.2 Crack
    一个bug引发的对大端小端的深入思考
    Ubuntu下常用开发工具的配置
    day5_redis学习
  • 原文地址:https://blog.csdn.net/m0_68681879/article/details/132837139
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号