mysql 订阅组件_阿里巴巴 MySQL binlog 增量订阅&消费组件-canal

简介

基于数据库日志解析,提供增量数据订阅&消费 的一个开源组件,官网:https://github.com/alibaba/canal

a44851e2fed37780c904409ba3723bf7.png

MySQL主备复制原理

38519d908cd68316bb61547a797e54ea.png

MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)

MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)

MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal 工作原理

canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议

MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )

canal 解析 binary log 对象(原始为 byte 流)

canal 应用架构

9f45ecf4bd17523b2e38e93f91e9d907.png

canal :canal Server + canal Client

mysql Instance↔  canal Instance ↔ canal Client

canal server代表一个canal运行实例,对应一个jvm,可对应(1...n)个数据队列(Instance)

Instance核心组件:

eventParser:数据源接入,模拟slave协议和master进行交互,解析协议

eventSink:Parser和Store连接器,进行数据过滤、加工、分发、归并

eventStore:数据存储 满足Ack <= Get <= put

metaManager:记录binlog解析位点和消费位点

d951b8d4cc03228fd35f1064cbb68aca.png

Instance可通过spring xml的方式进行自定义配置

607448ca7c11769c1eae5d28540ed65a.png

ps:高可用HA(High Availability)

安装与配置

mysql配置

#开启binlog;修改/etc/my.cnf,添加以下内容

#canal

log-bin=mysql-bin

binlog-format=ROW

server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

#创建具有slave权限的账号

CREATE USER canal IDENTIFIED BY 'canal';

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;

FLUSH PRIVILEGES;

启动

下载 canal,  release

wget https://github.com/alibaba/canal/releases/download/canal-1.0.17/canal.deployer-1.0.17.tar.gz

解压

mkdir /tmp/canal

tar zxvf canal.deployer-$version.tar.gz -C /tmp/canal

e115080b1591b87d802403b5868e274f.png

canal.properties(1) ;example?/instance.properties(1...n)

配置修改

vi conf/example/instance.properties

## mysql serverId

canal.instance.mysql.slaveId = 1234

#position info,需要改成自己的数据库信息

canal.instance.master.address = 127.0.0.1:3306

canal.instance.master.journal.name =

canal.instance.master.position =

canal.instance.master.timestamp =

#canal.instance.standby.address =

#canal.instance.standby.journal.name =

#canal.instance.standby.position =

#canal.instance.standby.timestamp =

#username/password,需要改成自己的数据库信息

canal.instance.dbUsername = canal

canal.instance.dbPassword = canal

canal.instance.defaultDatabaseName =

canal.instance.connectionCharset = UTF-8

#table regex 白名单

canal.instance.filter.regex=.\*\\\\..\*

#table black regex 黑名单

canal.instance.filter.black.regex = .\*\\\\..\*

##如果系统是1个 cpu,需要将 canal.instance.parser.parallel 设置为 false

启动

sh bin/startup.sh

查看 server 日志

vi logs/canal/canal.log

查看 instance 的日志

vi logs/example/example.log

关闭

sh bin/stop.sh

canal Client示例

建立连接--订阅表--获取数据--确认提交|异常回滚--取消订阅--断开连接

Client connector

简单连接:SimpleCanalconnector

集群连接:ClusterCanalconnector

写累了 休息会~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值