首页 > 数据库 >【java面经速记】Mysql和ES数据同步

【java面经速记】Mysql和ES数据同步

时间:2024-09-22 12:53:37浏览次数:9  
标签:canal binlog 同步 java Mysql 面经 MQ mysql ES

目录

Mysql业务数据库

ES查询数据库

数据同步方案

同步双写

异步双写(MQ方式)

基于Mysql的定时扫描同步

基于Binlog实时同步

使用canal监听binlog同步数据到es(流行方案)

拓展:mysql的主从复制原理

canal原理:

数据迁移同步工具

Mysql业务数据库

核心特点:开源免费、高并发、稳定、支持事务、支持SQL查询

高并发:链接轻量化(线程模式),优化器、执行器、事务引擎相对简单粗暴,存储引擎做得比较细致

一般用作上游数据源

ES查询数据库

核心特点:支持分词检索,多维筛选性能好,支持海量数据查询

文本搜索:基于倒排索引实现的搜索系统,文本模糊匹配搜索表现较好

多维筛选:亿级规模数据使用宽表预构建(消除join),配合全字段索引,是的ES在多维筛选上具有压倒性优势

数据同步方案

同步双写

最简单的方式,将数据写到mysql时,同时写到es中

优点:逻辑简单,实时性高

缺点:

  • 有mysql的地方都需要添加es的代码
  • 业务强耦合
  • 存在双写失败丢失数据的风险(ES系统不可用,程序和ES之间的网络故障,系统重启来不及写入ES)
  • mysql性能本身低,加个es,--
异步双写(MQ方式)

适用于多数据源写入的场景,各个源之间写入逻辑互不干扰

优点:

  • 性能高(相比同步双写)
  • 不易出现数据丢失:MQ消息的保障机制,当ES宕机或写入失败,还能重新雄安飞MQ消息
  • 隔离:多数据源之间相互隔离,能写入更多

缺点:

  • 不适合实时业务场景,有延时(异步消费模型,写入的数据不一定能马上看到)
  • 硬编码:接入新数据源需要编写新的代码
  • 复杂度增加:引入了消息中间件
基于Mysql的定时扫描同步

解决了上面2种的硬编码问题(不用ES或者MQ代码)

实时性要求不高:定时器处理

  • 数据库:m字段,任何curd操作都会导致该时间发生变化
  • 原来程序的CURD操作不做任何变化
  • 定时器程序,一定时间周期扫描指定表,该时间段内变化的数据提取出来
  • 逐条写入到ES中

典型实现:

基于logstash实现数据同步,原理:定期使用sql查询新增的数据写入ES中,实现数据的增量同步。

优点:上面的+worker代码编写简单不需要考虑增删查改

缺点:

  • 时效性差,固定频率刷新,就算秒级也是延时
  • 对数据库有轮询压力,可以放到从库中
基于Binlog实时同步

解决上面的硬编码+代码侵入+延迟问题

binlog:binary log

步骤:

  • 读取mysql的binlog日志,获取指定表的日志信息
  • 将读取信息转为MQ
  • 编写一个MQ消费程序
  • 不断更新MQ,每消费一条消息,写入到ES中

优点:

  • 解决上面3个问题
  • 性能高
  • 业务解耦

缺点:

构建Binlog系统复杂

如果采用MQ消费解析的binlog消息,一样存在MQ延时的风险。

使用canal监听binlog同步数据到es(流行方案)

canal : 根据mysql的binlog日志进行增量同步数据

拓展:mysql的主从复制原理
  • 所有create update delete操作都会进入mysql master节点
  • master节点会生成Binlog文件,每次操作Mysql都会记录到Binlog文件中
  • slave节点会订阅master节点的binlog文件,以增量备份的形式同步数据到slave数据
canal原理:

伪装成mysql的从节点,订阅master节点的binlog日志:

  • canal服务端向mysql的master节点传输dump协议
  • mysql的master节点接受到dump请求后推送binog日志给canal服务端,解析binlog对象(原始weibyte流)转成Json格式
  • canal客户端通过TCP协议或者MQ形式监听canal服务端,同步数据到ES

数据迁移同步工具

参考:【技术选型】Mysql和ES数据同步方案汇总-腾讯云开发者社区-腾讯云 (tencent.com)

标签:canal,binlog,同步,java,Mysql,面经,MQ,mysql,ES
From: https://blog.csdn.net/m0_73629042/article/details/142435283

相关文章

  • 【java面经】微服务架构速记
    目录由来是什么本质和单体架构的区别适用项目开发框架SpringCloud(流行)DubboDropwizardConsul,etcd&etc(微服务的模块)由来独立系统,SOA服务切换时间长,成本高,不够稳定是什么一套小服务来开发单个应用,每个服务运行在自己的进程中,使用HTTPAPI等轻量级机制通信服务可......
  • 测试类 测试 java
    1importcom.alibaba.fastjson.JSON;2importcom.alibaba.fastjson.JSONObject;3importcom.lgq.ai.YouProjectApplication;4importcom.lgq.ai.service.XxxService;5importorg.junit.Test;6importorg.junit.runner.RunWith;7importorg.springframewor......
  • Can't connect to local MySQL server through socket
    mysql-urootERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/tmp/mysql.sock'(2)这是mysql登录时找不到套接字的问题。首先需要明白的是,Linux端的mysqlserver启动时会开启一个socket,Linux上的MySQL的客户端在不使用IP连接时mysqlserver时,默认......
  • JAVA开源项目 甘肃非物质文化网站 计算机毕业设计
    本文项目编号T042,文末自助获取源码\color{red}{T042,文末自助获取源码}......
  • JAVA开源项目 房屋租赁系统 计算机毕业设计
    本文项目编号T041,文末自助获取源码\color{red}{T041,文末自助获取源码}......
  • JavaScript数据类型转换 字符串
    类型转换数据类型的转换有两种方式,一种是在运算等处理过程中自动转换,另一种是显式的转换。字符串类型转换除了在处理过程中的隐式转换,可以使用String(Value)函数进行转换。例子1:letval1=true;letval2=false;letval3=null;letval4=99;letval5=798.125; console.log(......
  • 解锁Java线程池:实战技巧与陷阱规避
    专业在线打字练习网站-巧手打字通,只输出有价值的知识。一前言线程池作为初学者常感困惑的一个领域,本次“巧手打字通课堂”将深入剖析其中几个最为普遍的误区。为了更清晰地阐述这些知识点,让我们以一个具体定义的线程池为例来展开说明。如下:ThreadPoolExecutorexecutor=ne......
  • JAVA毕业设计|(免费)springboot农产品智慧物流系统包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:springboot537springboot农产品智慧物流系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis工具:IDEA/Ecilpse、Navicat、Maven1.万字文档展示(部分)2.系统图片展示第5章系统详细设计......
  • JAVA毕业设计|(免费)springbootJAVA流浪动物救助平台-包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:springboot530springbootJAVA流浪动物救助平台-开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis工具:IDEA/Ecilpse、Navicat、Maven1.万字文档展示(部分)2.系统图片展示第5章系统详细设计系统实现部分就是将系统分析,系......
  • MySQL安装
    MySQL安装解压安装包在环境变量中写入解压后的路径点击确认即可写安装文件新建文件命名为my.ini,修改为自己安装路径即可[mysqld]#设置3306端口port=3306#设置mysql的安装目录----------是你的文件路径-------------basedir=E:\mysql-8.0.26-winx64#设......