开源数据同步神器——canal_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

媒介

如今大型的IT体系中,都邑运用分布式的体式格局,同时会有异常多的中间件,如redis、音讯行列、大数据存储等,然则现实中心的数据存储依旧是存储在数据库,作为运用最普遍的数据库,如何将mysql的数据与中间件的数据举行同步,既能确保数据的一致性、及时性,也能做到代码无侵入的体式格局呢?若是有如许的一个需求,数据修正后,需要及时的将mysql中的数据更新到elasticsearch,我们会怎样举行完成呢?

数据同步设计挑选

针对上文的需求,经由思索,开端有以下的一些设计:

  • 代码完成
    针对代码中举行数据库的增编削操纵时,同时举行elasticsearch的增编削操纵。

  • mybatis完成
    经由过程mybatis plugin举行完成,截取sql语句举行剖析, 针对insert、update、delete的语句举行处置惩罚。明显,这些操纵若是都是单条数据的操纵,是很轻易处置惩罚的。然则,现实开辟中,老是会有一些批量的更新或许删除操纵,这时刻,就很难举行处置惩罚了。

  • Aop完成
    不论是经由过程哪一种Aop体式格局,依据制订的划定规矩,如范例方法名,注解等举行切面处置惩罚,但依旧照样会涌现没法处置惩罚批量操纵数据的题目。

  • logstash
    logstash相似的同步组件供应的文件和数据同步的功用,能够举行数据的同步,只需要简朴的设置装备摆设就可以将mysql数据同步到elasticsearch,然则logstash的道理是每秒举行一次增量数据查询,将效果同步到elasticsearch,及时性要求特别高的,能够没法满足要求。且此设计的机能不是很好,形成资本的糟蹋。

完成体式格局 优缺点
代码完成 手艺难度低,侵入性强,及时性高
基于mybatis 有肯定的手艺难度,然则没法掩盖一切的场景
Aop完成 手艺难度低,半侵入性,需要范例代码,依旧没法掩盖一切的场景
logstash 手艺难度低,无侵入性,无需开辟,但会形成资本糟蹋。

那末是不是有甚么更好的体式格局举行处置惩罚吗?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: true
  fieldmap:
    id: "text"
    BuildingId: "text"
    HouseNum: "text"
    Floors: "text"
    IdProjectInfo: "text"
    HouseDigitNum: "text"
    BuildingNum: "text"
    BuildingName: "text"
    Name: "text"
    projectid: "text"
    bIdProjectInfo: "text"
    cinitid: "text"
    pCommunityId: "text"

enablefieldmap 是不是需要自动天生fieldmap,默以为false,若是需要启动的时刻就天生这设置为true,而且设置
fieldmap,相似elasticsearch mapping中每一个字段的范例。

esconfig bug处置惩罚

代码中猎取binlog的日记处置惩罚时,必需要猎取数据库名,然则当猎取binlog为type query时,是没法猎取
数据库名的,此处有bug,致使涌现 "Outer adapter write failed" ,且未输出毛病日记,修复此bug.

后续设计

  • 增添rabbit MQ的支撑
  • 增添redis的支撑

源码

源码地点:https://github.com/itmifen/canal

微旌旗灯号:itmifen

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。