Centos7/8 以Canal实现MySQL同步至Kafka


前言

博主全程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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值