前言

如今大型的IT系统中,都会使用分布式的方式,同时会有非常多的中间件,如redis、消息队列、大数据存储等,但是实际核心的数据存储依然是存储在数据库,作为使用最广泛的数据库,如何将mysql的数据与中间件的数据进行同步,既能确保数据的一致性、及时性,也能做到代码无侵入的方式呢?如果有这样的一个需求,数据修改后,需要及时的将mysql中的数据更新到elasticsearch,我们会怎么进行实现呢?

数据同步方案选择

针对上文的需求,经过思考,初步有如下的一些方案:

  • 代码实现
    针对代码中进行数据库的增删改操作时,同时进行elasticsearch的增删改操作。
  • mybatis实现
    通过mybatis plugin进行实现,截取sql语句进行分析, 针对insert、update、delete的语句进行处理。显然,这些操作如果都是单条数据的操作,是很容易处理的。但是,实际开发中,总是会有一些批量的更新或者删除操作,这时候,就很难进行处理了。
  • Aop实现
    不管是通过哪种Aop方式,根据制定的规则,如规范方法名,注解等进行切面处理,但依然还是会出现无法处理批量操作数据的问题。
  • logstash
    logstash类似的同步组件提供的文件和数据同步的功能,可以进行数据的同步,只需要简单的配置就能将mysql数据同步到elasticsearch,但是logstash的原理是每秒进行一次增量数据查询,将结果同步到elasticsearch,实时性要求特别高的,可能无法满足要求。且此方案的性能不是很好,造成资源的浪费。

那么是否有什么更好的方式进行处理吗?mysql binlog同步,实时性强,对于应用无任何侵入性,且性能更好,不会造成资源浪费,那么就有了我今天的主角——canal

canal

介绍

canal 是阿里巴巴的一个开源项目,基于java实现,整体已经在很多大型的互联网项目生产环境中使用,包括阿里、美团等都有广泛的应用,是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。
canal是通过模拟成为mysql 的slave的方式,监听mysql 的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。

使用

canal的介绍在官网有非常详细的说明,如果想了解更多,大家可以移步官网(https://github.com/alibaba/canal)了解。我这里补充下使用中不太容易理解部分。
canal的部署主要分为server端和client端。
server端部署好以后,可以直接监听mysql binlog,因为server端是把自己模拟成了mysql slave,所以,只能接受数据,没有进行任何逻辑的处理,具体的逻辑处理,需要client端进行处理。
client端一般是需要大家进行简单的开发。https://github.com/alibaba/canal/wiki/ClientAPI 有一个简单的示例,很容易理解。

canal Adapter

为了便于大家的使用,官方做了一个独立的组件Adapter,Adapter是可以将canal server端获取的数据转换成几个常用的中间件数据源,现在支持kafka、rocketmq、hbase、elasticsearch,针对这几个中间件的支持,直接配置即可,无需开发。上文中,如果需要将mysql的数据同步到elasticsearch,直接运行 canal Adapter,修改相关的配置即可。

常见问题

  • 无法接收到数据,程序也没有报错?
    一定要确保mysql的binlog模式为row模式,canal原理是解析Binlog文件,并且直接中文件中获取数据的。
  • Adapter 使用无法同步数据?
    按照官方文档,检查配置项,如sql的大小写,字段的大小写可能都会有影响,如果还无法搞定,可以自己获取代码调试下,Adapter的代码还是比较容易看懂的。

canal Adapter elasticsearch 改造

因为有了canal和canal Adapter这个神器,同步到elasticsearch、hbase等问题都解决了,但是自己的开发的过程中发现,Adapter使用还是有些问题,因为先使用的是elasticsearch同步功能,所以对elasticsearch进行了一些改造:

elasticsearch初始化

一个全新的elasticsearch无法使用,因为没有创建elasticsearch index和mapping,增加了对应的功能。 elasticsearch配置文件mapping节点增加两个参数:

enablefieldmap: truefieldmap:id: "text"name: "text"c_time: "text"

enablefieldmap 是否需要自动生成fieldmap,默认为false,如果需要启动的时候就生成这设置为true,并且设置 fieldmap,类似elasticsearch mapping中每个字段的类型。

esconfig bug处理

代码中获取binlog的日志处理时,必须要获取数据库名,但是当获取binlog为type query时,是无法获取 数据库名的,此处有bug,导致出现 "Outer adapter write failed" ,且未输出错误日志,修复此bug.

后续计划

  • 增加rabbit MQ的支持
  • 增加redis的支持

需要更多教程,微信扫码即可

开源数据同步神器——canal相关推荐

  1. mysql获取最好成绩对应数据的其他项_开源数据同步神器——canal

    前言 如今大型的IT系统中,都会使用分布式的方式,同时会有非常多的中间件,如redis.消息队列.大数据存储等,但是实际核心的数据存储依然是存储在数据库,作为使用最广泛的数据库,如何将mysql的数据 ...

  2. 阿里开源数据同步神器DataX异构数据源间数据同步同步MySQL与HDFS相互实战

    Datax 实战使用 继上一篇 阿里开源数据同步神器DataX异构数据源间数据同步基础介绍与快速入门之后的实战篇 1.MySQL-To-HDFS 环境 & 准备说明: 描述: 为了快速搭建测试 ...

  3. 阿里开源数据同步组件Canal

    一.简介 canal是阿里开源的数据同步组件 这个是是git地址 二.使用步骤 1.安装配置mysql 安装一个数据库(这个数据库是被监听的对象,我这里用的是mysql5.7) 创建一个用户专门用于数 ...

  4. 推荐一个开源数据同步神器,支持多种数据源和预警功能!

    DBSyncer是一款开源的数据同步中间件,提供MySQL.Oracle.SqlServer.PostgreSQL.Elasticsearch(ES).Kafka.File.SQL等同步场景. 支持上 ...

  5. 开源数据同步备份工具(MySQL、Oracle、SqlServer、PostgreSQL)

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 今天说的是一个开源数据同步备份工具,他支持mysql.oracle.kafka.PostgreSQL.sqlserver等 二.实现功能 数据同步与 ...

  6. k8s集群下搭建数据同步工具-canal:canal-admin篇

    k8s集群下搭建数据同步工具-canal:canal-admin篇 前言 容器化 canal-admin 环境准备 k8s集群创建pod canal-admin 前言 本文使用v1.1.4版本的can ...

  7. 开源oracle同步图形工具,阿里开源数据同步工具--DataX

    阿里开源数据同步工具--DataX 是啥?: 是异构数据源离线同步工具 能干啥?: 能够将MySQL sqlServer Oracle Hive HBase  FTP 之间进行稳定高效的数据同步. 设 ...

  8. 离线数据同步神器:DataX,支持几乎所有异构数据源的离线同步到MaxCompute

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 概述 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlSer ...

  9. 大数据同步工具Canal

    目录 1 什么是canal 2 canal能做什么 3 如何搭建canal 3.1 首先有一个MySQL服务器 3.2 安装canal 4 Java客户端操作 5 总结 6 ClientAdapter ...

最新文章

  1. soul一直显示正在登录聊天服务器,soul这个软件,为什么有些人在玩的时间很久以后(两百天以上),就不会再主动和其他人打招呼了?...
  2. Three.js中实现ASCII文本动画效果
  3. springboot项目自定义类在配置文件中的提示
  4. C# 运行时通过鼠标拖动改变控件的大小
  5. java.net.ConnectException: Connection refused: connect
  6. 获得Open Images冠军,商汤TSD目标检测算法入选CVPR 2020 ​
  7. 【MyBatis笔记】0-MyBatis简介
  8. Django中的Object Relational Mapping(ORM)
  9. html网页设计课程的思维导图,UI设计初级教程学哪些?课程大纲和思维导图分享给你!...
  10. ajaxfileupload 返回值_Ajaxfileupload 上传文件后返回response的contentType错误问题
  11. Setup Factory安装及程序安装包制作教程
  12. 云南昆明美容美发店务管理软件
  13. 诗词温习集:跟梁瀚文一起重温诗词(唐诗)之《春望》
  14. 马克思主义概论(第二章)
  15. 我体验了禾多科技的自动驾驶汽车,离量产不远了!
  16. 【Java】并发模式
  17. 工厂模式--简单工厂模式--抽象工厂模式
  18. C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写
  19. JS在html中打印所有类型的数据
  20. AES加解密(ECB模式)

热门文章

  1. 阿里巴巴宣布架构调整:集中发力推进三大战略 程立任集团CTO
  2. 吃相难看!《人民日报》再评视频网站套路:消磨观众信任,必将引火烧身
  3. GitHub或正式登陆中国!拟在中国设立分公司
  4. 小米CC9 Pro同款一亿像素摄像头有望被三星Galaxy S11采用
  5. 拍照实力再升级!三星Galaxy S11系列将有望搭载潜望镜头
  6. 预计2000元起步的骁龙855?魅族游戏手机16T有点猛!
  7. 暴风集团冯鑫因涉嫌犯罪被采取强制措施 蓝港互动王峰:等他出来喝酒
  8. MiniGui移植详解1【转】
  9. 一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)
  10. 前端md转html添加样式_前端文档站点搭建方案