canal原理及使用

浩客11个月前技术文章848

什么是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

相关文章

Kubernetes源码解读(五)--Reflector源码分析

Reflector 的任务就是向 apiserver watch 特定类型的资源,拿到变更通知后将其丢到 DeltaFIFO 队列中。1、Reflector的启动过程Reflector定义在k8s.i...

 MySQL运维实战(1.2)安装部署:使用二进制安装部署

MySQL运维实战(1.2)安装部署:使用二进制安装部署

一般在生产环境,我们会使用二进制安装的方式安装MySQL。使用二进制安装,在处理单机多实例、升级MySQL等场景下更加方便。如果有特殊的需求(比如要打一些patch),我们还可以自己编译二进制。1、下...

爬坑记录------容器内外网络不通,端口无法访问

爬坑记录------容器内外网络不通,端口无法访问

背景:客户需要一套datahub用于分许sparksql血缘,因此需要基于docker搭建,在搭建过程中遇到一个较坑的问题,这里做以记录搭建完成后查看docker容器已经正常启动查看红框中的内容信息,...

大数据自动化巡检系统使用说明

大数据自动化巡检系统使用说明

1. 大数据自动化巡检系统首页显示巡检集群数量、巡检模版、巡检指标、当日巡检情况等,如下图所示2. 自动化巡检提供基础配置,提供给两种巡检集群对接方式,一种是可以对接外部集群,通过系统接口调用,一种是...

RabbitMQ 集群部署

RabbitMQ 集群部署

1. 两种模式说到集群,小伙伴们可能第一个问题是,如果我有一个 RabbitMQ 集群,那么是不是我的消息集群中的每一个实例都保存一份呢?这其实就涉及到 RabbitMQ 集群的两种模式:1)普通集群...

Hbase部署

安装前准备1.1. 设置环境变量所有hbase节点都要做vi /etc/profile export HBASE_HOME=/opt/hbaseexport PATH=$PATH:$HBASE_HOM...

发表评论    

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