阿里开源的MySQL 数据库增量日志解析,提供增量数据订阅和消费。

agapple 80d3781d81 Update README.md 6 jaren geleden
client e4b6385dcc 调整kafka同步发送和消费,确保消息不丢失 6 jaren geleden
client-adapter 5eb67990ca fixed es reset 6 jaren geleden
client-launcher e4b6385dcc 调整kafka同步发送和消费,确保消息不丢失 6 jaren geleden
common 9bde69b6d6 [maven-release-plugin] prepare for next development iteration 6 jaren geleden
dbsync 9c24b26d02 fixed gtid 6 jaren geleden
deployer 53c2a02124 增加 目标数据库密码加密解密,采用druid方式进行加密解密,并设置canal.instance.enableDruid=true时,请使用druid加密数据库密码。false时,就是使用明文密码。 6 jaren geleden
docker b893aafae7 fixed issue #1001 , support docker restart 6 jaren geleden
driver c16037122b 修复通过`show master status`获取到多个GTID 时,回车符导致UUID 解析失败的bug 6 jaren geleden
example eb2a83b975 fixed test 6 jaren geleden
filter 9bde69b6d6 [maven-release-plugin] prepare for next development iteration 6 jaren geleden
images 5588da59b9 Update response time image. 6 jaren geleden
instance 53c2a02124 增加 目标数据库密码加密解密,采用druid方式进行加密解密,并设置canal.instance.enableDruid=true时,请使用druid加密数据库密码。false时,就是使用明文密码。 6 jaren geleden
meta 9bde69b6d6 [maven-release-plugin] prepare for next development iteration 6 jaren geleden
parse 5d55c7ac00 fixed fastsql upgrade 6 jaren geleden
prometheus 6682c56b9f Canal metrics group mode support. 6 jaren geleden
protocol 017fe87e4b fixed issue #928, support Dml.executeTime 6 jaren geleden
server e4b6385dcc 调整kafka同步发送和消费,确保消息不丢失 6 jaren geleden
sink 09df602f3b support filterTransactionEntry 6 jaren geleden
store 9c24b26d02 fixed gtid 6 jaren geleden
.gitignore 7fd958a490 fixed issue #801 , support canal docker 6 jaren geleden
LICENSE.txt a0defe575b init 10 jaren geleden
README.md 80d3781d81 Update README.md 6 jaren geleden
RELEASE.txt a0defe575b init 10 jaren geleden
codeformat.xml 7ebb3fd1ab fixed code template and format 10 jaren geleden
codetemplates.xml 7ebb3fd1ab fixed code template and format 10 jaren geleden
pom.xml a823b909ad upgrade spring version 3.2.18 6 jaren geleden

README.md

<div class="iteye-blog-content-contain">

背景

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

ps. 目前内部版本已经支持mysql和oracle部分版本的日志解析,当前的canal开源版本支持5.7及以下的版本(阿里内部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48)

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

  1. 数据库镜像
  2. 数据库实时备份
  3. 多级索引 (卖家和买家各自分库索引)
  4. search build
  5. 业务cache刷新
  6. 价格变化等重要业务消息

项目介绍

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

译意: 水道/管道/沟渠

语言: 纯java开发

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

关键词: mysql binlog parser / real-time / queue&topic

工作原理

mysql主备复制实现


从上层来看,复制分成三步:

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

canal的工作原理:

原理相对比较简单:

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

重要版本更新说明

canal 1.1.x系列,参考release文档:版本发布信息

  1. 整体性能测试&优化,提升了150%. #726 参考: 【Performance
  2. 原生支持prometheus监控 #765Prometheus QuickStart
  3. 原生支持kafka消息投递 #695Canal Kafka/RocketMQ QuickStart
  4. 原生支持aliyun rds的binlog订阅 (解决自动主备切换/oss binlog离线解析) 参考: 【Aliyun RDS QuickStart
  5. 原生支持docker镜像 #801 参考: 【Docker QuickStart

相关文档

See the wiki page for : wiki文档

wiki文档列表

多语言业务

  1. canal整体交互协议设计上使用了protobuf3.0,理论上可以支持绝大部分的多语言场景,欢迎大家提交多客户端的PR
  2. canal作为MySQL binlog的增量获取工具,可以将数据投递到MQ系统中,比如Kafka/RocketMQ,可以借助于MQ的多语言能力

相关资料

相关开源

  1. 阿里巴巴分布式数据库同步系统(解决中美异地机房):http://github.com/alibaba/otter
  2. 阿里巴巴去Oracle数据迁移同步工具(目标支持MySQL/DRDS):http://github.com/alibaba/yugong

相关产品

  1. 阿里云分布式数据库DRDS
  2. 阿里云数据传输服务DTS
  3. 阿里云数据库备份服务DBS
  4. 阿里云数据管理服务DMS

问题反馈

  1. qq交流群: 161559791
  2. 邮件交流: jianghang115@gmail.com
  3. 新浪微博: agapple0002
  4. 报告issue:issues

最新更新

  1. canal发布重大版本更新1.1.0,具体releaseNode参考:https://github.com/alibaba/canal/releases/tag/canal-1.1.0
  2. canal c#客户端开源项目地址: https://github.com/CanalClient/CanalSharp ,推荐!
  3. canal QQ讨论群已经建立,群号:161559791 ,欢迎加入进行技术讨论。
  4. canal消费端项目开源: Otter(分布式数据库同步系统),地址:https://github.com/alibaba/otter

  • Canal已在阿里云推出商业化版本 数据传输服务DTS, 开通即用,免去部署维护的昂贵使用成本。DTS针对阿里云RDS、DRDS等产品进行了适配,解决了Binlog日志回收,主备切换、VPC网络切换等场景下的订阅高可用问题。同时,针对RDS进行了针对性的性能优化。出于稳定性、性能及成本的考虑,强烈推荐阿里云用户使用DTS产品。DTS产品使用文档
  • DTS支持阿里云RDS&DRDS的Binlog日志实时订阅,现推出首月免费体验,限时限量,立即体验>>>