【简约入门】Canal概念与入门

681 阅读2分钟

简介

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

工作原理

mysql主备复制实现

mysql.jpeg

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

canal的工作原理

canal.jpeg

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

示例

准备

Mysql

开启binlog my.cnf配置增加如下:

mysqlset.png

安装Kafka

Kafka安装参考:Kafka QuickStart

canal安装

下载 canal

wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.server-1.1.4.tar.gz

解压
mkdir /tmp/cana
ltar zxvf canal.deployer-$version.tar.gz -C /tmp/canal
修改配置
  • 修改canal 配置文件 vi /usr/local/canal/conf/canal.properties

canal-pro.png

  • 修改instance 配置文件 vi conf/example/instance.properties

canalins.png

mq相关参数说明
参数名参数说明默认值
canal.mq.serverskafka为bootstrap.servers rocketMQ中为nameserver列表127.0.0.1:6667
canal.mq.retries发送失败重试次数0
canal.mq.batchSizekafka为ProducerConfig.BATCH_SIZE_CONFIG rocketMQ无意义16384
canal.mq.maxRequestSizekafka为ProducerConfig.MAX_REQUEST_SIZE_CONFIG rocketMQ无意义1048576
canal.mq.lingerMskafka为ProducerConfig.LINGER_MS_CONFIG , 如果是flatMessage格式建议将该值调大, 如: 200 rocketMQ无意义1
canal.mq.bufferMemorykafka为ProducerConfig.BUFFER_MEMORY_CONFIG rocketMQ无意义33554432
canal.mq.producerGroupkafka无意义 rocketMQ为ProducerGroup名Canal-Producer
canal.mq.canalBatchSize获取canal数据的批次大小50
canal.mq.canalGetTimeout获取canal数据的超时时间100
canal.mq.flatMessage是否为json格式 如果设置为false,对应MQ收到的消息为protobuf格式需要通过CanalMessageDeserializer进行解码true
canal.mq.transactionkafka消息投递是否使用事务, 主要针对flatMessage的异步发送和动态多topic消息投递进行事务控制来保持和canal binlog position的一致性, flatMessage模式下建议开启(需要kafka版本支持)。如果设置为false, flatMessage消息将会采用逐条同步的方式投递, 可能会产生消息丢失或者重复投递 rocketMQ无意义false
canal.mq.topicmq里的topic名
canal.mq.dynamicTopicmq里的动态topic规则, 1.1.3版本支持
canal.mq.partition单队列模式的分区下标,1
canal.mq.partitionsNum散列模式的分区数
canal.mq.partitionHash散列规则定义 库名.表名 : 唯一主键,比如mytest.person: id 1.1.3版本支持新语法,见下文
启动
cd /usr/local/canal/
sh bin/startup.sh
查看日志
  • 查看 logs/canal/canal.log vi logs/canal/canal.log
  • 查看instance的日志 vi logs/example/example.log
关闭
cd /usr/local/canal/
sh bin/stop.sh