canal部署应用

canal的配置加载方式

一 部署准备:

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

zookeeper部署参考 https://github.com/alibaba/canal/wiki/Zookeeper-QuickStart

kafka部署参考 https://github.com/alibaba/canal/wiki/Kafka-QuickStart

 

mysql要求

 a. 当前的canal开源版本支持5.7及以下的版本(阿里内部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48),ps. mysql4.x版本没有经过严格测试,理论上是可以兼容

 b. canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,并且配置binlog模式为row.

[mysqld] 

log-bin=mysql-bin #添加这一行就ok 

binlog-format=ROW #选择row模式 

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

 

二 canal 配置

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

#  按需修改成自己的数据库信息

#################################################

...

canal.instance.master.address=192.168.1.20:3306

# username/password,数据库的用户名和密码

...

canal.instance.dbUsername = canal

canal.instance.dbPassword = canal

...

# mq config

canal.mq.topic=example

# 针对库名或者表名发送动态topic

#canal.mq.dynamicTopic=mytest,.*,mytest.user,mytest\\..*,.*\\..*

canal.mq.partition=0

# hash partition config

#canal.mq.partitionsNum=3

#库名.表名: 唯一主键,多个表之间用逗号分隔

#canal.mq.partitionHash=mytest.person:id,mytest.role:id

#################################################

 

修改canal 配置文件vi /usr/local/canal/conf/canal.properties

# ...

# 可选项: tcp(默认), kafka, RocketMQ

canal.serverMode = kafka

# ...

# kafka/rocketmq 集群配置: 192.168.1.117:9092,192.168.1.118:9092,192.168.1.119:9092

canal.mq.servers = 127.0.0.1:6667

canal.mq.retries = 0

# flagMessage模式下可以调大该值, 但不要超过MQ消息体大小上限

canal.mq.batchSize = 16384

canal.mq.maxRequestSize = 1048576

# flatMessage模式下请将该值改大, 建议50-200

canal.mq.lingerMs = 1

canal.mq.bufferMemory = 33554432

# Canal的batch size, 默认50K, 由于kafka最大消息体限制请勿超过1M(900K以下)

canal.mq.canalBatchSize = 50

# Canal get数据的超时时间, 单位: 毫秒, 空为不限超时

canal.mq.canalGetTimeout = 100

# 是否为flat json格式对象

canal.mq.flatMessage = false

canal.mq.compressionType = none

canal.mq.acks = all

# kafka消息投递是否使用事务

canal.mq.transaction = false

canal.mq.dynamicTopic 表达式说明

canal 1.1.3版本之后, 支持配置格式:schema 或 schema.table,多个配置之间使用逗号或分号分隔

 

例子1:test\\.test 指定匹配的单表,发送到以test_test为名字的topic上

例子2:.*\\..* 匹配所有表,则每个表都会发送到各自表名的topic上

例子3:test 指定匹配对应的库,一个库的所有表都会发送到库名的topic上

例子4:test\\.* 指定匹配的表达式,针对匹配的表会发送到各自表名的topic上

例子5:test,test1\\.test1,指定多个表达式,会将test库的表都发送到test的topic上,test1\\.test1的表发送到对应的test1_test1 topic上,其余的表发送到默认的canal.mq.topic值

为满足更大的灵活性,允许对匹配条件的规则指定发送的topic名字,配置格式:topicName:schema 或 topicName:schema.table

 

例子1: test:test\\.test 指定匹配的单表,发送到以test为名字的topic上

例子2: test:.*\\..* 匹配所有表,因为有指定topic,则每个表都会发送到test的topic下

例子3: test:test 指定匹配对应的库,一个库的所有表都会发送到test的topic下

例子4:testA:test\\.* 指定匹配的表达式,针对匹配的表会发送到testA的topic下

例子5:test0:test,test1:test1\\.test1,指定多个表达式,会将test库的表都发送到test0的topic下,test1\\.test1的表发送到对应的test1的topic下,其余的表发送到默认的canal.mq.topic值

大家可以结合自己的业务需求,设置匹配规则,建议MQ开启自动创建topic的能力

 

canal.mq.partitionHash 表达式说明

canal 1.1.3版本之后, 支持配置格式:schema.table:pk1^pk2,多个配置之间使用逗号分隔

 

例子1:test\\.test:pk1^pk2 指定匹配的单表,对应的hash字段为pk1 + pk2

例子2:.*\\..*:id 正则匹配,指定所有正则匹配的表对应的hash字段为id

例子3:.*\\..*:$pk$ 正则匹配,指定所有正则匹配的表对应的hash字段为表主键(自动查找)

例子4: 匹配规则啥都不写,则默认发到0这个partition上

例子5:.*\\..* ,不指定pk信息的正则匹配,将所有正则匹配的表,对应的hash字段为表名

按表hash: 一张表的所有数据可以发到同一个分区,不同表之间会做散列 (会有热点表分区过大问题)

例子6: test\\.test:id,.\\..* , 针对test的表按照id散列,其余的表按照table散列

启动

cd /usr/local/canal/

sh bin/startup.sh

查看 logs/canal/canal.log 

vi logs/canal/canal.log

查看instance的日志:

vi logs/example/example.log

 

canal输出

{

    "data": null,

    "database""test4",

    "es": 1589264148000,

    "id": 1,

    "isDdl"false,

    "mysqlType": null,

    "old": null,

    "pkNames": null,

    "sql""create database test4",

    "sqlType": null,

    "table""",

    "ts": 1589264149112,

    "type""QUERY"

}

{

    "data": null,

    "database""test4",

    "es": 1589264649000,

    "id": 2,

    "isDdl"true,

    "mysqlType": null,

    "old": null,

    "pkNames": null,

    "sql""create table testTable(id int)",

    "sqlType": null,

    "table""testTable",

    "ts": 1589264649936,

    "type""CREATE"

}

{

    "data": [{

        "id""100"

    }],

    "database""test4",

    "es": 1589264662000,

    "id": 3,

    "isDdl"false,

    "mysqlType": {

        "id""int"

    },

    "old": null,

    "pkNames": null,

    "sql""",

    "sqlType": {

        "id": 4

    },

    "table""testTable",

    "ts": 1589264662531,

    "type""INSERT"

}

{

    "data": [{

        "id""200"

    }],

    "database""test4",

    "es": 1589264720000,

    "id": 4,

    "isDdl"false,

    "mysqlType": {

        "id""int"

    },

    "old": [{

        "id""100"

    }],

    "pkNames": null,

    "sql""",

    "sqlType": {

        "id": 4

    },

    "table""testTable",

    "ts": 1589264720976,

    "type""UPDATE"

}

{

    "data": [{

        "id""100"

    }],

    "database""test4",

    "es": 1589264765000,

    "id": 6,

    "isDdl"false,

    "mysqlType": {

        "id""int"

    },

    "old": null,

    "pkNames": null,

    "sql""",

    "sqlType": {

        "id": 4

    },

    "table""testTable",

    "ts": 1589264765454,

    "type""DELETE"

}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值