ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

(4)Canal多实例使用

2022-02-14 16:44:35  阅读:380  来源: 互联网

标签:Canal canal -- quote instance 实例 使用 supplier example


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

标签:Canal,canal,--,quote,instance,实例,使用,supplier,example
来源: https://www.cnblogs.com/wzk153/p/15893110.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有