此贴原创,需要转载请标明原帖位置,否则将追究
安装步骤:
1、安装mysql -(自行安装)
2、安装zk+kafka -(自行安装)
3、安装canal
4、安装canal-admin
--------------------------------------------------
一、安装mysql并开启主从配置
这里不再叙说,可以参考这篇帖子:https://www.cnblogs.com/oldAlcazar/p/6835573.html
或者自行百度安装
主从配置:
#添加这一行就ok
log-bin=mysql-bin
#选择row模式
binlog-format=ROW
#配置mysql replaction需要定义,不能和canal的slaveId重复
server_id=1
建立一个专用的同步数据源:
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
二、安装zk+kafka
略…自行百度
三、安装canal
3.1 下载canal
目前采用的1.1.4最新版本,在 canal1.1.4 中查找 canal 最新deploy 版本
解压 mkdir /home/canal 并解压到此目录 tar -zxvf xxxx.tar.gz
3.2 配置示例数据源
进入config/目录下,example就是一个示例数据源,这里一个文件夹就代表一个数据源配置
创建新的数据源并复制示例配置,example可以删除
新建test数据源
root@md-finereport-1 (12:56:39) conf # mkdir test
复制配置
root@md-finereport-1 (12:57:45) conf # cp example/instance.properties test/
修改配置
root@md-finereport-1 (12:59:03) conf # vim test/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=test
# 针对库名或者表名发送动态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
#################################################
3.3返回到conf目录下操作canal.properties
#因为要开启admin管理操作,此次测试是把admin跟canal放在一台机器上的
#这一行管理配置需要放开
# canal admin config
canal.admin.manager = 127.0.0.1:8089
#这里是配置数据源管理的 就是前面说到的有哪些目录就是代表数据源,之前建立的test目录即为test数据源名称,那么其它数据源类似,多个源配置多个即可
canal.destinations = test,example
# ...
# 可选项: tcp(默认), kafka, RocketMQ===修改为kafka
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
mq相关参数说明
参数名 | 参数说明 | 默认值 |
---|---|---|
canal.mq.servers | kafka为bootstrap.servers rocketMQ中为nameserver列表 | 127.0.0.1:6667 |
canal.mq.retries | 发送失败重试次数 | 0 |
canal.mq.batchSize | kafka为ProducerConfig.BATCH_SIZE_CONFIG#rocketMQ无意义 | 16384 |
canal.mq.maxRequestSize | kafka为ProducerConfig.MAX_REQUEST_SIZE_CONFIG #rocketMQ无意义 | 1048576 |
canal.mq.lingerMs | kafka为ProducerConfig.LINGER_MS_CONFIG , 如果是flatMessage格式建议将该值调大, 如: 200 rocketMQ无意义 | 1 |
canal.mq.bufferMemory | kafka为ProducerConfig.BUFFER_MEMORY_CONFIG rocketMQ无意义 | 33554432 |
canal.mq.acks | kafka为ProducerConfig.ACKS_CONFIG#rocketMQ无意义 | all |
canal.mq.kafka.kerberos.enable | kafka为ProducerConfig.ACKS_CONFIG#rocketMQ无意义 | false |
canal.mq.kafka.kerberos.krb5FilePath | kafka kerberos认证#rocketMQ无意义 | …/conf/kerberos/krb5.conf |
canal.mq.kafka.kerberos.jaasFilePath | kafka kerberos认证#rocketMQ无意义 | …/conf/kerberos/jaas.conf |
canal.mq.producerGroup | kafka无意义#rocketMQ为ProducerGroup名Canal-Producer | |
canal.mq.accessChannel | kafka无意义#rocketMQ为channel模式,如果为aliyun则配置为cloud | local |
--------- | --------- | --------- |
canal.mq.vhost= | rabbitMQ配置 | 无 |
canal.mq.exchange= | rabbitMQ配置 | 无 |
canal.mq.username= | rabbitMQ配置 | 无 |
canal.mq.password= | rabbitMQ配置 | 无 |
canal.mq.aliyunuid= | rabbitMQ配置 | 无 |
canal.mq.canalBatchSize | 获取canal数据的批次大小 | 50 |
canal.mq.canalGetTimeout | 获取canal数据的超时时间 | 100 |
canal.mq.parallelThreadSize | mq数据转换并行处理的并发度 | 8 |
canal.mq.flatMessage | 是否为json格式如果设置为false,对应MQ收到的消息为protobuf格式需要通过CanalMessageDeserializer进行解码 | false |
canal.mq.topic | mq里的topic名 | 无 |
canal.mq.dynamicTopic | mq里的动态topic规则, 1.1.3版本支持 | 无 |
canal.mq.partition | 单队列模式的分区下标, | 1 |
canal.mq.partitionsNum | 散列模式的分区数 | 无 |
canal.mq.partitionHash | 散列规则定义库名.表名 : 唯一主键,比如mytest.person: id1.1.3版本支持新语法,见下文 | 无 |
四、安装canal-admin
4.1 下载canal-admin
目前采用的1.1.4最新版本,在 canal1.1.4 中查找 canal 最新admin 版本
解压 mkdir /home/canal-admin 并解压到此目录 tar -zxvf xxxx.tar.gz
4.2 配置相关配置
进入config目录修改application.yml
server:
port: 8089
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
spring.datasource:
#这是admin需要存相关的配置信息
address: 127.0.0.1:3306
#单独的库拿来保存admin相关的数据源
database: canal_manager
#需要账号密码,建议是其它独立的账户,不要跟主从同步的原账号和密码相同
username: canal
password: canal
driver-class-name: com.mysql.jdbc.Driver
#这里注意 只需要配置地址以及数据库名字即可,参考:jdbc:mysql://172.0.0.1:3306/canal_manager?Unicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
hikari:
maximum-pool-size: 30
minimum-idle: 1
canal:
adminUser: admin
adminPasswd: admin
配置完成需要到上述配置的数据库中初始化此框架对应的表:
初始化SQL脚本里会默认创建canal_manager的数据库,建议使用root等有超级权限的账号进行初始化 b. canal_manager.sql默认会在conf目录下,也可以通过链接下载 canal_manager.sql
配置完成直接去启动:
sh bin/startup.sh并查看日志:
vi logs/admin.log
2019-08-31 15:43:38.162 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8089 (http)
2019-08-31 15:43:38.180 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8089"]
2019-08-31 15:43:38.191 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
2019-08-31 15:43:38.194 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.29
....
2019-08-31 15:43:39.789 [main] INFO o.s.w.s.m.m.annotation.ExceptionHandlerExceptionResolver - Detected @ExceptionHandler methods in customExceptionHandler
2019-08-31 15:43:39.825 [main] INFO o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: class path resource [public/index.html]
此时代表canal-admin已经启动成功,可以通过 http://127.0.0.1:8089/ 访问,默认密码:admin/123456
这个时候直接去canal工程里面进行启动canal
root@md-finereport-1 (13:21:51) canal # sh bin/startup.sh
这个时候看下日志:tail -f logs/canal/canal.log 以及数据源读取日志:tail -f logs/test/test.log
没有问题即成功 那么回到控制台刷新admin主页即可得到对应的service
会自动给你扫描进来
对应的表监听操作也会同时启动起来:
注意canal跟canal-admin是在同一台机器上,一定要注意,如果不是请修改 canal下的 config/canal.properties当中的第一个canal.admin.manager对应的地址
这个时候我们操作数据库去修改数据 那么就可以到kafka看到对应的数据了
对应的返回结果集字符串:
{
"data": [
{
"aarr": "你好-测试"
}
],
"database": "tests",
"es": 1573968472000,
"id": 6,
"isDdl": false,
"mysqlType": {
"aarr": "varchar(255)"
},
"old": null,
"pkNames": null,
"sql": "",
"sqlType": {
"aarr": 12
},
"table": "test_canal",
"ts": 1573968473257,
"type": "INSERT"
}
涉及到了操作类型 insert 以及数据 还有表名 那么后续对数据加工即可