canal中间件的实践操作
canal 简单解释
中间一个kafka ,上游一个 生产者。下游一个消费者。
生产者负责监听读取 mysql 的binlog。然后发送record到kafka。
下游取record消费,并整合数据, 然后同步到 目标库中。
1. 创建topic
为什么要第一步创建topic,因为你先见生产者的时候会自动创建topic ,但是那个topic 的配置都是默认的。
topic 的命名规则是我们自己规定的。目前使用起来较为丝滑
打开kafka 的 CMAK开始配置,如下
Partitions: 分区
Replication Factor: 备份
下面还有
delete.retention.ms : 1000
file.delete.delay.ms : 1000
2. 配置、创建生产者
主要三点
- 指定 binlog日志解析库和表
- 指定 kafka topic
- 指定 partitions 和 分区算法
1. 指定binlog 日志 解析库和表
登入 canal 管理控制中心
新增一个数据源库instance,并在里面新增一组同步
#################################################
## mysql serverId , v1.0.26+ will autoGen
# 命名规则取部分ip
canal.instance.mysql.slaveId=127001
# enable gtid use true/false
canal.instance.gtidon=false
# position info
# 源数据库
canal.instance.master.address=127.0.0.1:0000
# 从哪个文件binlog开始解析
canal.instance.master.journal.name=
# 从binlog 指针开始解析
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=
# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=
# table meta tsdb info
canal.instance.tsdb.enable=false
canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:0000/canal_manager
canal.instance.tsdb.dbUsername=xxx
canal.instance.tsdb.dbPassword=xxx
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=
# username/password
canal.instance.dbUsername=xxx
canal.instance.dbPassword=xxx
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=xxx
# table regex
# 假如有两个数据同步,中间用逗号隔开
# 例 : 数据库名\\.表名,数据库名\\.表名
canal.instance.filter.regex=user\\.usr_info,usr\\.user_qwerdf
# table black regex
canal.instance.filter.black.regex=
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch
# mq config
# canal.mq.topic=库名
#canal.mq.properties.security.protocol = SASL_PLAINTEXT
#canal.mq.properties.sasl.mechanism = PLAIN
# dynamic topic route by schema or table regex
# 库名_表名:库名\\.表名。多个用逗号隔开。
canal.mq.dynamicTopic=user_usr_info:user\\.usr_info,usr_user_qwerdf:usr\\.user_qwerdf _dot_dot_logistics:ydky_dot\\.dot_logistics,ydky_dot_dot_customer:ydky_dot\\.dot_customer
#canal.mq.partition=0
# hash partition config
# 分区数
canal.mq.partitionsNum=3
# 库名\\.表名:主键 或者联合主键,联合主键使用^连接 。。多个配置使用逗号连接
canal.mq.partitionHash=user\\.user_info:name^age,user\\.user_qwerdf:id
#################################################
// TODO 未完待续。。。
canal 的日常维护真的很繁杂很累,还容易出错。所以是不是可以来个图形界面化。