1.前言

很多时候,我们很多业务场景可能只需要同步多个或者单个数据库多个或者单个表的数据,canal提供了多实例(Instance)功能让我们可以处理这些业务场景。废话少说,让我们来学习下这块知识点。

2.前期准备

服务名称

IP/域名

端口

zookeeper

192.168.142.129,192.168.142.130,192.168.142.131

2181

mysql

192.168.142.131

3306

rabbitmq

192.168.18.230

5672

2.1RabbitMQ参数

虚拟主机(Virtual hosts):Canal
交换器(Exchanges):exchange.canal
路由key(Routing key):routing.quote、routing.supplier
队列(Queues):quote_example、supplier_example

3.两个实例(Instance)监听相同数据库


先从conf目录下拷贝两份example实例,具体操作命令如下:

//供应商报价实例
cp -r /home/deng/canal/canal.deployer/conf/example /home/deng/canal/canal.deployer/conf/quote_example
//供应商实例
cp -r /home/deng/canal/canal.deployer/conf/example /home/deng/canal/canal.deployer/conf/supplier_example

如图所示:

客户端我们还是沿用上章节MQ(解析两个实例数据),这里不做代码如何解析数据了。
●修改canal.properties配置,把之前创建supplier_examplequote_example两个实例配置到canal.destinations选项去(如果配置集群,记得每个canal服务配置都要修改):

vi conf/canal.properties
canal.destinations = quote_example,supplier_example

并找到RabbitMQ标题栏配置MQ配置:

##################################################
######### RabbitMQ #############
##################################################
rabbitmq.host = 192.168.18.230 --MQ连接地址
rabbitmq.virtual.host = Canal --virtualHost
rabbitmq.exchange = exchange.canal --交换器名称
rabbitmq.username = admin --MQ登录用户名
rabbitmq.password = 123456 --MQ登录密码
rabbitmq.deliveryMode = 2 --投递模式,实现消息持久化:1.非持续性,2.持续性

●两个实例(quote_example、supplier_example)instance.properties配置相同参数(不知道这几个参数是什么含义,可以翻看我之前写的文章或者查看官网):

canal.instance.master.address=192.168.142.131:3306 --数据库连接地址
canal.instance.dbUsername=canal --数据库登录用户名
canal.instance.dbPassword=qwer1234 --数据库登录密码

●修改quote_example. instance.properties配置:

vi conf/quote_example/instance.properties
canal.mq.topic=routing.quote --MQ路由键
canal.instance.filter.regex=ebs_material.supplier_quote --数据解析关注的表(格式:数据库.表)

●修改supplier_example. instance.properties配置

vi conf/supplier_example/instance.properties
canal.mq.topic=routing.supplier --MQ路由键
canal.instance.filter.regex=ebs_material.supplier --数据解析关注的表(格式:数据库.表)

●清空rabbitmq消息,然后执行如下sql语句:

INSERT INTO ebs_material.supplier_quote (PN,Brand,StockQty,SupplierId,CreateTime) VALUES ('LM358DT','TI',10000,1,'2022-02-14 00:00:00');
INSERT INTO ebs_material.supplier (Name,CreateTime) VALUES ('艾睿','2022-02-14 00:00:00');

登录rabbitmq管理后台我们会看到只有两条待消费的消息(supplier_quote和supplier表插入行数据):

4.两个实例(Instance)监听不相同数据库


canal两个实例(Instance)监听不同数据库数据同步,其实也只是把每个实例连接数据库地址等配置修改下就可以了,其他配置跟上面小节基本一样的,想了解可以自行到官网查看,这里就不多说了,请大伙自行配置测试。

5. mysql数据解析关注的和Perl正则表达式

Canal为我们提供了canal.instance.filter.regex与canal.instance.filter.black.regex选项参数来过滤数据库表数据解析,类似黑白名单。常见例子有:
●所有表:.* or .*\\..*
●canal schema下所有表:canal\\..*
●canal下的以canal打头的表:canal\\.canal.*
●canal schema下的一张表:canal\\.test1
●多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
注:多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)

6.错误处理

如果canal启动时候从日志看到报这个错误:can't find start position for example。有如下解决方法:
●单机
删除meta.dat文件,重启canal,问题解决。
●集群
进入canal对应的zookeeper集群下,删除节点/otter/canal/destinations/实例/1001/cursor,重启canal即可恢复(不懂命令可以到zookeeper官网或者百度查找操作命令)。

参考文献:
Canal Kafka/RocketMQ QuickStart
AdminGuide

(4)Canal多实例使用的更多相关文章

  1. mysql 开源~canal的深度解读1

    一 简介:经过一段时间的研究,对canal有了一些见解 二 配置文件: 1 canal.properties (系统根配置文件)     主要参数列表   canal.properties (系统根配 ...

  2. canal 配置

    参考:https://www.2cto.com/database/201609/547661.html Spring配置 spring配置的原理是将整个配置抽象为两部分: xxxx-instance. ...

  3. 【Canal源码分析】整体架构

    本文详解canal的整体架构. 一.整体架构 说明: server代表一个canal运行实例,对应于一个jvm instance对应于一个数据队列 (1个server对应1..n个instance) ...

  4. 【Canal源码分析】配置项

    本文讲解canal中的一些配置含义. 一.配置加载图 二.配置文件canal.properties 2.1 common参数定义 比如可以将instance.properties的公用参数,抽取放置到 ...

  5. 转载:阿里canal实现mysql binlog日志解析同步redis

    from: http://www.cnblogs.com/duanxz/p/5062833.html 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数 ...

  6. 谈谈对Canal(增量数据订阅与消费)的理解

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...

  7. 对 Canal (增量数据订阅与消费)的理解

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...

  8. 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...

  9. canal中间件

    简介: 基于数据库增量(模拟MySQL slave的交互协议)日志解析,提供增量数据订阅和消费(客户端与canal建立关系) 安装版本:1.1.0 git 环境需求: jdk1.7以上 mysql开启 ...

随机推荐

  1. 初识python 之 爬虫:爬取某电影网站信息

    注:此代码仅用于个人爱好学习使用,不涉及任何商业行为!  话不多说,直接上代码: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:201 ...

  2. JMeter_分布式压测配置

    前置条件 电脑A,电脑B,电脑C均安装相同版本的JMeter 和JDK.其中电脑A作为控制机,电脑B和电脑C作为施压机 电脑A IP:172.16.0.114 电脑B IP:172.16.0.115 ...

  3. [Docker] 在CentOS6.8 安装 Docker

    运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡,退出容器. # 查看当前版本: cat /etc/issue # 导入pu ...

  4. 第10组-Alpha冲刺 总结

    1.基本情况 组长博客链接:https://www.cnblogs.com/cpandbb/p/14007413.html 答辩总结: ·产品偏离了最开始的方向,地图和刷一刷功能做得没那么好,外卖订单 ...

  5. mongodb基础整理篇————常规操作[二]

    前言 简单整理一下常规操作. 正文 虽然一般说写代码看的是思想,但是呢,如果不知道mongodb 有哪些常用的操作,那么你怎么能知道mongodb是否符合你的需求,比如说如果聚合功能都没有,你得自己写 ...

  6. rockchip-rk3399 RGA的使用

    RGA的使用 RGA即二维图像辅助计算单元,该单元可以在极短时间内拷贝.旋转.格式转换.缩放.混合图片. rk官方RGA库链接:https://github.com/rockchip-linux/li ...

  7. python极简教程04:进程和线程

    测试奇谭,BUG不见. 大家好,我是谭叔. 这一场,主讲python的进程和线程. 目的:掌握初学必须的进程和线程知识. 进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个 ...

  8. [MAUI] 在.NET MAUI中结合Vue实现混合开发

    ​ 在MAUI微软的官方方案是使用Blazor开发,但是当前市场大多数的Web项目使用Vue,React等技术构建,如果我们没法绕过已经积累的技术,用Blazor重写整个项目并不现实. Vue是当前流 ...

  9. Genymotion安装apk问题,不能部署Genymotion-ARM-Translation_v1.zip

    把Genymotion-ARM-Translation_v1.zip拖进去提示 Files successfully copied to: /sdcard/Download 但还是不能安装apk 解决 ...

  10. kafka入门(采坑)笔记

    前言 之前在工作和学习过程中也会有记笔记的习惯,但是没有发布出来,也因最近各方面的瓶颈急需突破和提升,所以还是要很积极的融入大环境大生态中,好废话不多说,说下这次遇到的问题 第一步启动zk 根据教程安 ...