mysql 中间件canal_canal中间件 - osc_5wcf5hfb的个人空间 - OSCHINA - 中文开源技术交流社区...

##简介: 基于数据库增量(模拟MySQL slave的交互协议)日志解析,提供增量数据订阅和消费(客户端与canal建立关系)

安装版本:1.1.0 git

##环境需求:

jdk1.7以上

mysql开启binlog_format=row,并配置mysql slave相关权限。

##目录结构:

[root@wap canal]# tree -L 2 /usr/local/canal

/usr/local/canal

├── bin #启动、关闭、重启命令

│   ├── restart.sh

│   ├── startup.bat

│   ├── startup.sh

│   └── stop.sh

├── conf #配置文件目录

│   ├── canal.properties #canal程序配置文件

│   ├── example #数据库实例配置目录,一个实例一个目录

│   │├── instance.properties #每个实例单独的配置文件

│ │└── meta.dat #记录binlog相关信息,防止重启相关信息丢失

│   ├── logback.xml

│   ├── metrics

│   └── spring

├── lib

│   ├── aopalliance-1.0.jar

│   ├── aviator-2.2.1.jar ....

└── logs

├── canal #canal程序本身日志目录

└── example #连接数据库实例的日志目录

##配置说明:

###conf/canal.properties 主配置文件:

canal.id: 每个canal server实例的唯一标识

canal.ip: 服务地址

canal.port: 服务端端口,客户端连接

canal.zkServers: 集群时,连接zookeeper

canal.instance.detecting.enable: 是否开启心跳检查

canal.instance.detecting.sql: 心跳检查sql,配置select查询语句,适用于高可用场景

canal.destinations: canal上部署的instance列表,多实例用逗号分隔

canal.conf.dir: 配置文件目录

canal.auto.scan: 开启instance自动扫描,扫描canal.conf.dir目录下的instance

canal.file.data.dir: 持久化数据到file目录

canal.instance.global.spring.xml: 全局的spring配置方式的组件文件,默认选择基于file持久化模式,用于非HA场景

####canal.instance.global.spring.xml配置选项介绍 memory-instance.xml介绍:

所有的组件(parser , sink , store)都选择了内存版模式,记录位点的都选择了memory模式,重启后又会回到初始位点进行解析 特点:速度最快,依赖最少(不需要zookeeper) 场景:一般应用在quickstart,或者是出现问题后,进行数据分析的场景,不应该将其应用于生产环境

default-instance.xml介绍:

store选择了内存模式,其余的parser/sink依赖的位点管理选择了持久化模式,目前持久化的方式主要是写入zookeeper,保证数据集群共享. 特点:支持HA 场景:生产环境,集群化部署.

group-instance.xml介绍:

主要针对需要进行多库合并时,可以将多个物理instance合并为一个逻辑instance,提供客户端访问。 场景:分库业务。 比如产品数据拆分了4个库,每个库会有一个instance,如果不用group,业务上要消费数据时,需要启动4个客户端,分别链接4个instance实例。使用group后,可以在canal server上合并为一个逻辑instance,只需要启动1个客户端,链接这个逻辑instance即可.

###conf/example/instance.properties 实例配置

canal.instance.mysql.slaveId: slaveid唯一,与mysql serverid不同即可。

canal.instance.gtidon=false : 是否开启gtid

canal.instance.master.address: 数据库链接地址

canal.instance.master.journal.name: 链接起始的binlog文件

canal.instance.master.position: 链接起始的binlog偏移量

canal.instance.master.timestamp: 链接时起始的binlog时间戳

canal.instance.dbUsername: 数据库帐号

canal.instance.dbPassword: 数据库密码

canal.instance.connectionCharset: 与数据库编码格式一致

canal.instance.filter.regex=.\.. :正则匹配库和表,默认所有库和表

canal.instance.filter.black.regex=mysql..* :过滤掉哪些库和表,这里过滤mysql库的所有表。正则匹配

##配置式例: ###1. 多实例配置

打开canal.auto.scan参数,会根据canal.auto.scan.interval定义的频率,进行扫描

发现目录有新增,启动新的instance

发现目录有删除,关闭老的instance

发现对应目录的instance.properties有变化,重启instance

cp -a conf/example conf/example_1

关闭canal.auto.scan,在canal.destinations后以逗号分隔配置多实例名称。

canal.destinations= example,example_1

$ cp -a conf/example conf/example_1

$ ./bin/restart.sh

高可用,集群相关配置wiki中介绍,请参阅官网 源码分析

好的,我会尽量回答您的问题。 首先,您需要在docker中部署canal,可以使用以下docker-compose.yml文件: ``` version: '3' services: canal-server: image: canal/canal-server:v1.1.4 ports: - 11111:11111 environment: - canal.instance.master.address=mysql:3306 - canal.instance.dbUsername=canal - canal.instance.dbPassword=canal - canal.instance.connectionCharset=UTF-8 - canal.instance.tsdb.enable=true - canal.instance.gtidon=false - canal.instance.filter.query.dcl=false - canal.instance.filter.query.ddl=false mysql: image: mysql:8.0.30 ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=test - MYSQL_USER=canal - MYSQL_PASSWORD=canal ``` 然后,您需要创建一个example配置文件,用于同步mysql到rabbitmq。可以参考以下示例配置: ``` canal.instance.master.address = 127.0.0.1:3306 canal.instance.dbUsername = canal canal.instance.dbPassword = canal canal.instance.filter.regex = .*\\..* canal.instance.filter.black.regex = mysql\\.slave_.* canal.mq.topic = example canal.mq.partition = 0 canal.mq.dynamicTopic = false canal.mq.partitionsNum = 3 canal.mq.groupId = GID_example canal.mq.accessKey = canal.mq.secretKey = canal.mq.namespace = canal.mq.producerGroup = PID_example canal.mq.maxRetryTimes = 3 canal.mq.batchSize = 16384 canal.mq.maxRequestSize = 1048576 canal.mq.sendTimeout = 3000 canal.mq.compressType = none ``` 接下来,您需要在docker中部署mysql 8.0.30,您可以使用以下docker-compose.yml文件: ``` version: '3' services: mysql: image: mysql:8.0.30 ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=test - MYSQL_USER=canal - MYSQL_PASSWORD=canal ``` 最后,您需要在docker中部署rabbitmq并创建一个消息队列,可以使用以下docker-compose.yml文件: ``` version: '3' services: rabbitmq: image: rabbitmq:3-management ports: - 5672:5672 - 15672:15672 ``` 然后,您可以使用canal同步mysql到rabbitmq,只需将上面提到的example配置文件中的canal.mq.topic设置为您创建的rabbitmq队列名称即可。 希望能帮到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值