canal原理及使用

浩客1年前技术文章1158

什么是canal

canal,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具

Dingtalk_20231229030412.jpg

工作原理

MySQL主备复制原理

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)

  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)

  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal 工作原理

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议

  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )

  • canal 解析 binary log 对象(原始为 byte 流)

1、开启mysql binlog功能
开启之后对mysql的性能会有一定的影响

# 修改my.cnf
vim /etc/my.cnf

[mysqld]    
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1


# 改了配置文件之后,重启MySQL,使用命令查看是否打开binlog模式:
service mysqld restart
# 进入mysql命令行验证一下
show variables like 'log_bin';


2、搭建canal
# 解压到指定目录下
tar -xvf canal.deployer-1.1.4.tar.gz 

#修改配置文件conf/example/instance.properties
# mysql地址
canal.instance.master.address=master:3306
# mysql用户名和密码
canal.instance.dbUsername=root
canal.instance.dbPassword=123456

# 增加canal数据采集之后写入kafkatopic
# 动态topic,每一个表自动创建一个topic
canal.mq.dynamicTopic=bigdata\\..*

# 修改配置文件conf/canal.properties
# zookeeper的地址,如果有多台需要写多个使用逗号分隔
canal.zkServers = master:2181
# canal保存数据的位置
canal.serverMode = kafka
# kafka地址列表
canal.mq.servers = master:9092

# 启动Canal   启动后会出现进程CanalLauncher
# 启动canal之前需要先保证kafka处于启动状态
cd /usr/local/soft/canal/bin/
# 启动
./startup.sh
# 停止
stop.sh
# 重启
restart.sh


## 测试

-- 在mysql创建表插入数据

mysql -uroot -p123456

use `bigdata`;

-- 创建表
CREATE TABLE `order`
(
    id          BIGINT UNIQUE PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    order_id    VARCHAR(64)   COMMENT '订单ID',
    amount      DECIMAL(10, 2) COMMENT '订单金额',
    create_time DATETIME       COMMENT '创建时间',
    UNIQUE uniq_order_id (`order_id`)
) COMMENT '订单表';

--  插入数据

INSERT INTO `order`(order_id, amount) VALUES ('100', 66);
UPDATE `order` SET amount = 88 WHERE order_id = '100';
DELETE  FROM `order` WHERE order_id = '100';

-- 查看kafka中是否出现topic

kafka-topics.sh --list  --zookeeper  master:2181,node1:2181,node2:2181

--会出现bigdata.order

-- 消费数据
kafka-console-consumer.sh --bootstrap-server master:9092 --from-beginning --topic bigdata.order
返回列表

上一篇:数据湖Iceberg

下一篇:FLink-Canal

相关文章

Golang new and make

Go  语言中 new 方法和 make 方法,都是用于分配相应类型内存空间。1、makemake 内置函数分配并初始化(仅)slice、map 或 chan 类型的对象,返回值是所创建的类型本身。与...

Hive优化之Spark执行引擎的参数优化(二)

Hive优化之Spark执行引擎的参数优化(二)

        Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中...

EasyMR如何为服务开启Kerberos

EasyMR如何为服务开启Kerberos

一、Hadoop为什么需要安全最早部署Hadoop集群时并没有考虑安全问题,未开启安全认证时,Hadoop 是以客户端提供的用户名作为用户凭证, 一般即是发起任务的Unix 用户。一般线上机器部署服务...

Nginx-Ingress和traefik区别

Nginx-Ingress和traefik区别

Nginx-Ingress和traefik区别1. Ingress Controllerk8s 是通过一个又一个的 controller 来负责监控、维护集群状态。Ingress Controller...

更改默认StorageClass

为什么要更改默认StorageClass根据安装方式的不同,你的Kubernetes集群可以使用标记为默认值的现有StorageClass进行部署。然后,这个默认的StorageClass用于动态地为...

Flink关于HiveCatalog

HiveCatalogHiveCatalog 有两个用途:作为原生 Flink 元数据的持久化存储,以及作为读写现有 Hive 元数据的接口。配置在flink-sql-connector-hive-1...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。