canal(1.1.8) 部署

一、什么是canal

canal,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。可以简单地把canal理解为一个用来同步增量数据的一个工具。
官网地址: alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件
在这里插入图片描述
canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。

二、canal能做什么

canal的数据同步不是全量的,而是增量。基于binary log增量订阅和消费,canal可以做:
数据库镜像
数据库实时备份
索引构建和实时维护(拆分异构索引、倒排索引等)
业务cache(缓存)刷新
带业务逻辑的增量数据处理

三、canal部署

3.1 MySQL的准备

3.1.1 创建数据库

CREATE DATABASE db01;
use db01;

3.1.2 创建表

CREATE TABLE user_info(
	`id` VARCHAR(255),
	`name` VARCHAR(255),
	`sex` VARCHAR(255)
);

3.1.2 修改配置文件开启Binlog

vi /etc/my.cnf
log-bin=binlog
binlog-format=row

在这里插入图片描述

3.1.4 重启MySQL使配置生效

systemctl restart mysqld

3.1.5 赋权限(注意!!!是在mysql主库中进行创建)

在MySQL中执行

# canal和mysql的端口不一致
-- 登录 MySQL
mysql -hxx.xx.xx.xxuroot -pxxxxxx
-- 创建用户并授权
CREATE USER 'canal'@'xx.xx.xx.xx' IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'xx.xx.xx.xx';
FLUSH PRIVILEGES;

# canal和mysql的端口一致
-- set global validate_password_length=4;
-- set global validate_password_policy=0;
-- GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal' ;
-- flush privileges;

3.2 下载并解压Jar包

下载地址: Releases · alibaba/canal
在这里插入图片描述
将下载的压缩包上传至虚拟机,解压到/opt/module/canal包下
!!!注意:canal解压后是分散的,我们在指定解压目录的时候需要将canal指定上

sudo mkdir /opt/module/canal
sudo tar -zxvf canal.deployer-1.1.8.tar.gz -C /opt/module/canal

3.3 修改canal.properties的配置

cd /opt/module/canal/conf

vi canal.properties

修改以下配置
在这里插入图片描述
在这里插入图片描述

说明:这个文件是canal的基本通用配置,canal端口号默认就是11111,修改canal的输出model,默认tcp,改为输出到kafka

3.4 修改instance.properties

我们这里只读取一个MySQL数据,所以只有一个实例,这个实例的配置文件在conf/example目录下

cd /opt/module/canal/example

vi instance.properties

配置MySQL服务器地址
在这里插入图片描述
配置连接MySQL的用户名和密码,默认就是我们前面授权的canal
在这里插入图片描述
修改instance.properties输出到Kafka的主题以及分区数
在这里插入图片描述
启动Canal

cd /opt/module/canal/

./bin/startup.sh
#相应停止的命名如下:
# 停止Canal
./bin/stop.sh

# 清理可能存在的残留进程
pkill -f canal

# 启动Canal
./bin/startup.sh

3.5如果没有安装jdk:

3.5.1. 检查是否安装了 Java

首先,检查你的系统中是否已经安装了 Java。运行以下命令:

java -version

如果系统中没有安装 Java,你会看到类似以下的输出:
-bash: java: command not found

3.5.2. 安装 Java

如果系统中没有安装 Java,你需要安装它。你可以使用 YUM 安装 OpenJDK(Java Development Kit)。运行以下命令:

sudo yum install java-1.8.0-openjdk-devel

安装完成后,再次运行 java -version 检查是否安装成功:

java -version

你应该看到类似以下的输出:

openjdk version “1.8.0_XXX”
OpenJDK Runtime Environment (build 1.8.0_XXX-bXX)
OpenJDK 64-Bit Server VM (build 25.XXX-bXX, mixed mode)

3.5.3. 设置 JAVA_HOME 环境变量

即使 Java 已经安装, startup.sh 脚本可能仍然需要 JAVA_HOME 环境变量。你需要设置 JAVA_HOME 并将其添加到 PATH 中。
首先,找到 Java 的安装路径。通常,OpenJDK 安装在 /usr/lib/jvm/java-1.8.0-openjdk 。你可以通过以下命令确认:

ls -d /usr/lib/jvm/java-1.8.0-openjdk

然后,设置 JAVA_HOME 环境变量。你可以将以下内容添加到你的 ~/.bashrc 或 ~/.bash_profile 文件中:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH

运行以下命令使更改生效:

source ~/.bashrc

3.5.4. 验证 Java 环境变量

运行以下命令验证 JAVA_HOME 和 PATH 是否设置正确:

echo $JAVA_HOME
echo $PATH
java -version

你应该看到 JAVA_HOME 指向正确的 Java 安装路径,并且 java -version 命令能够正常运行。

3.5.5. 重新运行 startup.sh

现在,重新运行 startup.sh 脚本:

./bin/startup.sh

在这里插入图片描述

看到CanalLauncher你表示启动成功,同时会创建canal_test主题
启动Kafka消费客户端测试,查看消费情况

./bin/kafka-console-consumer.sh --bootstrap-server xx.xx.xx.xx:9092 --topic canal_test

#若kafka没有监测到数据,查看canal日志报错

2025-07-17 15:56:18.797 [main] ERROR c.a.o.c.common.zookeeper.running.ServerRunningMonitor - start failed
com.alibaba.otter.canal.meta.exception.CanalMetaManagerException: dir[../conf] can not read/write
2025-07-17 15:56:18.803 [main] ERROR c.a.o.c.common.zookeeper.running.ServerRunningMonitor - processActiveExit failed
java.lang.NullPointerException: null
	at com.alibaba.otter.canal.meta.FileMixedMetaManager.stop(FileMixedMetaManager.java:120)
	at com.alibaba.otter.canal.instance.core.AbstractCanalInstance.stop(AbstractCanalInstance.java:122)
	at com.alibaba.otter.canal.server.embedded.CanalServerWithEmbedded.stop(CanalServerWithEmbedded.java:151)
	at com.alibaba.otter.canal.deployer.CanalController$1.processActiveExit(CanalController.java:181)
	at com.alibaba.otter.canal.common.zookeeper.running.ServerRunningMonitor.processActiveExit(ServerRunningMonitor.java:254)
	at com.alibaba.otter.canal.common.zookeeper.running.ServerRunningMonitor.stop(ServerRunningMonitor.java:133)
	at com.alibaba.otter.canal.common.zookeeper.running.ServerRunningMonitor.start(ServerRunningMonitor.java:105)
	at com.alibaba.otter.canal.deployer.CanalController.start(CanalController.java:545)
	at com.alibaba.otter.canal.deployer.CanalStarter.start(CanalStarter.java:88)
	at com.alibaba.otter.canal.deployer.CanalLauncher.main(CanalLauncher.java:128)
2025-07-17 15:56:18.805 [main] INFO  com.alibaba.otter.canal.deployer.CanalStarter - ## the canal server is running now ......

#执行下述命令

sudo chown -R bigdata:bigdata .
sudo chmod -R 755 conf
ls -ld conf

#drwxr-xr-x. 5 bigdata bigdata 123 7月 17 15:53 conf

./bin/stop.sh

rm -f conf/example/meta.dat
rm -f conf/example/*.tmp

./bin/startup.sh

向MySQL中插入数据后查看消费者控制台
这里是在Navicat中插入的数据进行测试

INSERT INTO user_info VALUES('1001','zhangsan','male'),('1002','lisi','female');

插入成功之后,kafka的消费者控制台有如下的输出打印
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值