首页 » MySQL » 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

原文 http://blog.csdn.net/xzx4959/article/details/79162525

2018-01-25 17:40:51阅读(175)

     原文链接:阿里巴巴开源项目: 基于mysql数据库binlog增量订阅&消费

     

背景

   早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps. 目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解析

 

基于日志增量订阅&消费支持的业务:

数据库镜像数据库实时备份多级索引 (卖家和买家各自分库索引)search build业务cache刷新价格变化等重要业务消息 项目介绍

   名称:canal [kə'næl]

   译意: 水道/管道/沟渠 

   语言: 纯java开发

   定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql

 

工作原理 mysql主备复制实现

阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
 从上层来看,复制分成三步:

master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);slave将master的binary log events拷贝到它的中继日志(relay log);slave重做中继日志中的事件,将改变反映它自己的数据。 canal的工作原理:

阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

原理相对比较简单:

canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议mysql master收到dump请求,开始推送binary log给slave(也就是canal)canal解析binary log对象(原始为byte流) 架构

阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

说明:

server代表一个canal运行实例,对应于一个jvminstance对应于一个数据队列  (1个server对应1..n个instance)

instance模块:

eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)eventStore (数据存储)metaManager (增量订阅&消费信息管理器) 知识科普

mysql的Binlay Log介绍

http://dev.mysql.com/doc/refman/5.5/en/binary-log.htmlhttp://www.taobaodba.com/html/474_mysqls-binary-log_details.html

简单点说:

mysql的binlog是多文件存储,定位一个LogEvent需要通过binlog filename +  binlog position,进行定位mysql的binlog数据格式,按照生成的方式,主要分为:statement-based、row-based、mixed。
Java代码  阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹