前言
博主全程root用户操作,不是root请加sudo
一、部署所需
1.MySQL(教程)
2.Kafka(教程)
3.java(教程)
二、环境配置
systemctl disable --now firewalld # 防火墙关闭,如果是云服务器安全组记得放行
setenforce 0 # selinux关闭
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
yum install wget tar vim net-tools curl -y # 常用插件安装
三、部署流程
1.环境配置
新建canal存放目录:
mkdir -p /data/canal
查看MySQLbinlog是否开启,创建用户,表格(mysql8是默认开启的):
SHOW VARIABLES LIKE '%bin%';
CREATE USER canal IDENTIFIED BY 'Asas12!@';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'Asas12!@';
CREATE DATABASE `test` CHARSET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;
查看Kafka和Zookeeper是否启动:
netstat -tunlp|grep java
2.部署流程
下载Canal的deployer模块(中间件是kafka的话建议1.1.4就行,链接过期请官网下载):
cd /data/canal
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
tar -zxvf canal.deployer-1.1.4.tar.gz
解压后的目录结构:
- bin # 运维脚本
- conf # 配置文件
canal_local.properties # canal本地配置,一般不需要动
canal.properties # canal服务配置
logback.xml # logback日志配置
metrics # 度量统计配置
spring # spring-实例配置,主要和binlog位置计算、一些策略配置相关,可以在canal.properties选用其中的任意一个配置文件
example # 实例配置文件夹,一般认为单个数据库对应一个独立的实例配置文件夹
instance.properties # 实例配置,一般指单个数据库的配置
- lib # 服务依赖包
- logs # 日志文件输出目录
修改配置文件(logback.xml看自己需求设置,测试和生产建议DEBUG):
cd /data/canal/conf
vim canal.properties
#以下为修改的参数,其他默认
canal.instance.parser.parallelThreadSize = 16 #去除注释
canal.serverMode = kafka
canal.mq.servers = 127.0.0.1:9092 #kafka服务或者集群broker的地址
vim example/instance.properties
canal.instance.mysql.slaveId=654321 #id,可随便设置,别和Master节点的服务ID相同就行
canal.instance.master.address=127.0.0.1:3306 #数据库地址
canal.instance.dbUsername=canal
canal.instance.dbPassword=Asas12!@
canal.instance.defaultDatabaseName=test #添加,要同步的数据库
canal.mq.topic=test #同步到kafka名为test的topic里面
canal.mq.partition=0
启动:
sh /data/canal/bin/startup.sh
#查看服务日志
tail -100f /data/canal/logs/canal/canal
#查看实例日志 -- 一般情况下,关注实例日志即可
tail -100f /data/canal/logs/example/example.log
三、测试
mysql创建表:
mysql -uroot -p
use test
CREATE TABLE `order`
(
id BIGINT UNIQUE PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
order_id VARCHAR(64) NOT NULL COMMENT '订单ID',
amount DECIMAL(10, 2) NOT NULL DEFAULT 0 COMMENT '订单金额',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE uniq_order_id (`order_id`)
) COMMENT '订单表';
INSERT INTO `order`(order_id, amount) VALUES ('10086', 999);
UPDATE `order` SET amount = 10087 WHERE order_id = '10086';
DELETE FROM `order` WHERE order_id = '10086';
查看kafka的topic有没有映射到test里面:
sh /data/kafka/kafka_2.13-2.6.0/bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --from-beginning --topic test