简介
canal紧张用场是基于 MySQL 数据库增量日志解析,供应增量数据订阅和消费,运用处景十分丰富。
常用场景电阛阓景下商品、用户实时更新同步到至Elasticsearch、solr等搜索引擎;价格、库存发生变更实时同步到redis;数据库异地备份、数据同步;代替利用轮询数据库办法来监控数据库变更,有效改进轮询耗费数据库资源。事情事理MySQL主备复制事理
Master发生数据变更时会将变更信息记录至binlog日志;Slave将Master的binlog日志中的事宜拷贝到它relay log;Slave重放relay log中事宜,将数据变更反响它自己的数据;
canal事情事理

大略地讲,canal将伪装自己为MySQL Slave并向Master发送dump协议,获取binlog并解析
Canal内部组件解析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客户端支持Java、Golang、PHP、Python、Rust、C#六种措辞,其他措辞可将变更记录投放到 Kafka/RocketMQ中,借助MQ多措辞特性进行处理。
日常管理canal 1.1.4版本,已引入canal-admin工程,供应相对友好的WebUI操作界面,方便更多用户配置管理、节点运维等的操作。
canal-admin的核心模型紧张有:
instance,对应canal-server里的instance,一个最小的订阅mysql的行列步队server,对应canal-server,一个server里可以包含多个instance集群,对应一组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 \
性能监控
Canal server性能指标监控基于prometheus的实现。如果没打仗过,可以先理解一下,目前主流的互联网公司都会用到prometheus,篇幅有限,这里不做展开,来日诰日单独进行详细的先容。