监听mysql的binlog日志工具分析:canal、Maxwell、Databus、DTS - 程序员大本营

标签: | 发表时间:2020-03-24 08:37 | 作者:
出处:https://www.pianshen.com

目录

canal

Maxwell

Databus

阿里云的数据传输服务DTS

相关/类似技术

yugong

DRD


canal

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

原理:

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

官网文档/源码(可谷歌右键翻译,有详细的接入案例): https://github.com/alibaba/canal

网上好的学习链接:https://www.jianshu.com/p/6299048fad66

https://www.jianshu.com/p/6299048fad66

源码结构解析:http://www.tianshouzhi.com/api/tutorials/canal/380

偏日志解析的文章: https://blog.csdn.net/varyall/article/details/79208574

配置文件解析: https://blog.csdn.net/my201110lc/article/details/80765356

架构模型: https://blog.csdn.net/nuaazhaofeng/article/details/80513174

源码启动时序图: https://www.jianshu.com/p/d7d1b42242f1

canal架构图.png

parser

EventParser架构.png

整个parser过程大致可分为几步:

    Connection获取上一次解析成功的位置(如果第一次启动,则获取初始制定的位置或者是当前数据库的binlog位点)
    Connection建立连接,发生BINLOG_DUMP命令
    Mysql开始推送Binary Log
    接收到的Binary Log通过Binlog parser进行协议解析,补充一些特定信息
    传递给EventSink模块进行数据存储,是一个阻塞操作,直到存储成功
    存储成功后,定时记录Binary Log位置
 

sink

Sink.png

说明:

  • 数据过滤:支持通配符的过滤模式,表名,字段内容等
  • 数据路由/分发:解决1:n (1个parser对应多个store的模式)
  • 数据归并:解决n:1 (多个parser对应1个store)
  • 数据加工:在进入store之前进行额外的处理,比如join

Maxwell

官网:http://maxwells-daemon.io/

好的文章: https://blog.csdn.net/wwwdc1012/article/details/88388552

canal、maxwell、mysql_streamer对比

canal 由Java开发,分为服务端和客户端,拥有众多的衍生应用,性能稳定,功能强大;canal 需要自己编写客户端来消费canal解析到的数据。

maxwell相对于canal的优势是使用简单,它直接将数据变更输出为json字符串,不需要再编写客户端。

建议使用maxwell。

Databus

Databus是一种低延迟变化捕获系统,已成为LinkedIn数据处理管道不可或缺的一部分。Databus解决了可靠捕获,流动和处理主要数据更改的基本要求。Databus提供以下功能:

  1. 源与消费者之间的隔离
  2. 保证按顺序和至少一次交付具有高可用性
  3. 从更改流中的任意时间点开始消耗,包括整个数据的完全引导功能。
  4. 分区消费
  5. 源一致性保存

对比项

 

Databus

canal

结论

支持的数据库

 

mysql, oracle

mysql(据说内部版本支持oracle)

Databus目前支持的数据源更多

业务开发

 

业务只需要实现事件处理接口

事件处理外,需要处理ack/rollback,

反序列化异常等

Databus开发接口用户友好度更高

服务模型

 relay

relay可以同时服务多个client

一个server instance只能服务一个client

(受限于server端保存拉取位点)

Databus服务模式更灵活

 

client

client可以拉取多个relay的变更,

访问的relay可以指定拉取某些表某些分片的变更

client只能从一个server拉取变更,

而且只能是拉取全量的变更

可扩展性

 

client可以线性扩展,处理能力也能线性扩展

(Databus可识别pk,自动做数据分片)

client无法扩展

Databus扩展性更好

可用性

client ha

client支持cluster模式,每个client处理一部分数据,

某个client挂掉,其他client自动接管对应分片数据

主备client模式,主client消费,

如果主client挂掉,备client可自动接管

Databus实时热备方案更成熟

 

relay/server ha

多个relay可连接到同一个数据库,

client可以配置多个relay,relay故障启动切换

主备relay模式,relay通过zk进行failover

canal主备模式对数据库影响更小

 

故障对上游

数据库的影响

client故障,bootstrap会继续拉取变更,

client恢复后直接从bootstrap拉取历史变更

client故障会阻塞server拉取变更,

client恢复会导致server瞬时从数据库拉取大量变更

Databus本身的故障对数据库影响几乎为0

系统状态监控

 

程序通过http接口将运行状态暴露给外部

暂无

Databus程序可监控性更好

开发语言

 

java,核心代码16w,测试代码6w

java,4.2w核心代码,6k测试代码

Databus项目更成熟,当然学习成本也更大

阿里云的数据传输服务DTS

数据传输服务(Data Transmission Service,简称DTS)是阿里云提供的一种支持 RDBMS(关系型数据库)、NoSQL、OLAP 等多种数据源之间数据交互的数据流服务。DTS提供了数据迁移、实时数据订阅及数据实时同步等多种数据传输能力,可实现不停服数据迁移、数据异地灾备、异地多活(单元化)、跨境数据同步、实时数据仓库、查询报表分流、缓存更新、异步消息通知等多种业务应用场景,助您构建高安全、可扩展、高可用的数据架构。
           优势:数据传输(Data Transmission)服务 DTS 支持 RDBMS、NoSQL、OLAP 等多种数据源间的数据传输。它提供了数据迁移、实时数据订阅及数据实时同步等多种数据传输方式。相对于第三方数据流工具,数据传输服务 DTS 提供更丰富多样、高性能、高安全可靠的传输链路,同时它提供了诸多便利功能,极大得方便了传输链路的创建及管理。
           个人理解:就是一个消息队列,会给你推送它包装过的sql对象,可以自己做个服务去解析这些sql对象。
           阿里文档快速入口:https://help.aliyun.com/product/26590.html

免去部署维护的昂贵使用成本。DTS针对阿里云RDS(在线关系型数据库)、DRDS等产品进行了适配,解决了Binlog日志回收,主备切换、VPC网络切换等场景下的订阅高可用问题。同时,针对RDS进行了针对性的性能优化。出于稳定性、性能及成本的考虑,推荐使用。

相关/类似技术

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

yugong

目标:帮助用户完成从Oracle数据迁移到MySQL: https://github.com/alibaba/yugong

DRD

阿里巴巴集团自主研发的 分布式数据库中间件产品,专注于解决单机关系型数据库扩展性问题,具备轻量(无状态)、灵活、稳定、高效等特性。 https://www.aliyun.com/product/drds

相关 [监听 mysql binlog] 推荐:

使用canal+kafka监听MySQL binlog小实践

- - 掘金后端
最近,想对MySQL有进一步的认识,看如何保证缓存与数据库一致性,在负责业务上也需要这方面的优化,有些文章提到使用监听MySQL binlog实现,想试下,本文纯属好奇心驱使. 所用工具:MySQL + Canal + Kafka. 1、kafka: kafka.apache.org/quickstart(… 2、Canal: github.com/alibaba/can… 3、MySQL版本如下:.

监听mysql的binlog日志工具分析:canal、Maxwell、Databus、DTS - 程序员大本营

- -
阿里云的数据传输服务DTS. 定位:基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议. mysql master收到dump请求,开始推送binary log给slave(也就是canal).

MySQL 5.6 的 binlog API 很不错

- khsing - BT的花 blogs
MySQL 5.6 开始,开发者可以通过编程获得 binlog 内容,通过这个 API 可以做很多事情,比如自制备份,比如..... 这样做搜索更加简单了,对于开发者来说只有 SQL 操作;自动建索引这件事. 交给MySQL的某个'伪'复制节点自动完成,不需要再编程了!.

MySQL binlog 增量数据解析服务 - 简书

- -
MySQL binlog 增量数据解析服务. 介绍如何借助于 MySQL 的 Master-slave 协议实现 MySQL 增量数据获取服务. 做过后端开发的同学都知道, 经常会遇到如下场景:. 后端程序根据业务逻辑, 更新数据库记录. 过了几天, 业务需求需要更新搜索索引. 又过了几天, 随着数据需求方的增多, 结构改成发送数据到消息中间件(例如 Kafka), 其他系统自行从消息中间件订阅数据.

基于MySQL binlog的数据同步中间件 mbinlogmq

- - OSCHINA 社区最新软件
mbinlogmq 一个基于MySQL binlog协议的数据同步中间件 什么是mbinlogmq.

必须了解的MySQL三大日志:binlog、redo log和undo log

- - DockOne.io
日志是 MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息. MySQL日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类. 作为开发,我们重点需要关注的是二进制日志( binlog)和事务日志(包括 redo log和 undo log),本文接下来会详细介绍这三种日志.

一个重大轮子: 基于mysql数据库binlog的增量订阅&消费

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

[转][转]基于mysql数据库binlog的增量订阅&消费中间件:Canal

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

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

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

Binlog 的三个业务应用场景

- - IT瘾-dev
02、binlog的业务应用. 01、什么是binlog. binlog是mysql的一种二进制日志文件,用来记录数据的变化. mysql使用binlog进行主从复制,如图:. 客户端向master的mysql sever写入数据. 当数据发生变化时,master将变更的数据记录写入到二进制文件中,即binlog.