canal+kafka+mysql+canal-admin联合部署+最新版

此贴原创,需要转载请标明原帖位置,否则将追究

安装步骤:
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.serverskafka为bootstrap.servers rocketMQ中为nameserver列表127.0.0.1:6667
canal.mq.retries发送失败重试次数0
canal.mq.batchSizekafka为ProducerConfig.BATCH_SIZE_CONFIG#rocketMQ无意义16384
canal.mq.maxRequestSizekafka为ProducerConfig.MAX_REQUEST_SIZE_CONFIG #rocketMQ无意义1048576
canal.mq.lingerMskafka为ProducerConfig.LINGER_MS_CONFIG , 如果是flatMessage格式建议将该值调大, 如: 200 rocketMQ无意义1
canal.mq.bufferMemorykafka为ProducerConfig.BUFFER_MEMORY_CONFIG rocketMQ无意义33554432
canal.mq.ackskafka为ProducerConfig.ACKS_CONFIG#rocketMQ无意义all
canal.mq.kafka.kerberos.enablekafka为ProducerConfig.ACKS_CONFIG#rocketMQ无意义false
canal.mq.kafka.kerberos.krb5FilePathkafka kerberos认证#rocketMQ无意义…/conf/kerberos/krb5.conf
canal.mq.kafka.kerberos.jaasFilePathkafka kerberos认证#rocketMQ无意义…/conf/kerberos/jaas.conf
canal.mq.producerGroupkafka无意义#rocketMQ为ProducerGroup名Canal-Producer
canal.mq.accessChannelkafka无意义#rocketMQ为channel模式,如果为aliyun则配置为cloudlocal
---------------------------
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.parallelThreadSizemq数据转换并行处理的并发度8
canal.mq.flatMessage是否为json格式如果设置为false,对应MQ收到的消息为protobuf格式需要通过CanalMessageDeserializer进行解码false
canal.mq.topicmq里的topic名
canal.mq.dynamicTopicmq里的动态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
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WJKT4qWk-1573970119774)(en-resource://database/1447:0)]

这个时候直接去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 以及数据 还有表名 那么后续对数据加工即可

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值