golang 连接docker mysql_Canal——阿里巴巴开源的基于binlog的MySQL增量订阅&消费组件...

本文介绍了Canal,阿里巴巴开源的MySQL增量订阅和消费组件,用于数据库实时同步。Canal通过监听MySQL binlog,实现数据变更的实时推送。文章详细阐述了其工作原理、内部组件、工作流程,并提供了基于Docker的使用示例,同时提到了性能监控和日常管理。
摘要由CSDN通过智能技术生成
b1c9173891e9f22687fafda4efcd9e98.png

简介

canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费,应用场景十分丰富。

常用场景

  1. 电商场景下商品、用户实时更新同步到至Elasticsearch、solr等搜索引擎;
  2. 价格、库存发生变更实时同步到redis;
  3. 数据库异地备份、数据同步;
  4. 代替使用轮询数据库方式来监控数据库变更,有效改善轮询耗费数据库资源。

工作原理

MySQL主备复制原理

034159b2cbd8dcbe252c6a8d338559c7.png
  1. Master发生数据变更时会将变更信息记录至binlog日志;
  2. Slave将Master的binlog日志中的事件拷贝到它relay log;
  3. Slave重放relay log中事件,将数据变更反映它自己的数据;

canal工作原理

c527cce21b6e9e5ab2c8db4127649a81.png

简单地讲,canal将伪装自己为MySQL Slave并向Master发送dump协议,获取binlog并解析

Canal内部组件解析

c92d5401476010b5428ef18b596d79c7.png

Canal server内部由几个模块组成, 外部的Server负责接收Canal Client的请求并返回数据。每个Server 内部由多个Instance组成,每个Instance都有五个模块,Parser负责解析,Sink负责过滤,Store负责存储,Manager 对元数据进行管理,Alarm则用于报警,Instance通常是一个数据库。

工作流程

Canal Server 启动后,会根据配置启动多个Instance, 每个Instance都会通过Socket连接到MySQL Master并dump binlog,然后将binlog二进制数据交给Parser解析,通过Sink过滤,最后存储在Store里面,当客户端连接时,会从zookeeper上读取对应的client的信息,而Manager负责管理zookeeper,如果这个过程出现错误,Alarm则会打印出报警信息。

canal客户端支持JavaGolangPHPPythonRustC#六种语言,其他语言可将变更记录投放到 Kafka/RocketMQ中,借助MQ多语言特性进行处理。

日常管理

5a7b41c95bf0a4e35c0a106d77b1426f.png

canal 1.1.4版本,已引入canal-admin工程,提供相对友好的WebUI操作界面,方便更多用户配置管理、节点运维等的操作。

canal-admin的核心模型主要有:

  1. instance,对应canal-server里的instance,一个最小的订阅mysql的队列
  2. server,对应canal-server,一个server里可以包含多个instance
  3. 集群,对应一组canal-server,组合在一起面向高可用HA的运维

使用示例(基于docker)

拉取镜像

docker pull canal/canal-server

本地编译

git clone git@github.com:alibaba/canal.gitcd canal/docker && sh build.sh

运行cannal

sh run.sh -e canal.auto.scan=false -e canal.destinations=test -e canal.instance.master.address=127.0.0.1:3306 -e canal.instance.dbUsername=canal -e canal.instance.dbPassword=canal -e canal.instance.connectionCharset=UTF-8 -e canal.instance.tsdb.enable=true -e canal.instance.gtidon=false 

性能监控

fba6456c46e764cff8a07ea432547352.png

Canal server性能指标监控基于prometheus的实现。如果没接触过,可以先了解一下,目前主流的互联网公司都会用到prometheus,篇幅有限,这里不做展开,明天单独进行详细的介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值