大数据技术Canal总结和详细案例

Canal同步MySQL数据的优缺点以及加字段情况 实时、低侵入、增量、灵活、生态好。配置管理复杂、仅增量、需转换、DDL同步难、一致性和性能需保障。MySQL 5.7 及以下导致表重建和全表更新,产生海量 binlog UPDATE 事件。MySQL 8.0也会触发全表 UPDATE。解决加字段突增:用 MySQL 8.0+;避免;用NULL列+分批更新;低峰期操作。强队列缓冲;增加生产者/消费者/分区并行度;批量消费;消费者逻辑优化(幂等、过滤伪更新);监控告警;弹性伸缩。(谨慎) Canal 过滤;暂停同步 + 全量重建; 阅读详情

0 Canal介绍

Canal 是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前Canal 主要支持了 MySQL 的 Binlog 解析,解析完成后才利用 Canal Client 来处理获得的相关数据。(数据库同步需要阿里的 Otter 中间件,基于 Canal)

1 MySQL 的 Binlog

1.1 什么是 Binlog

MySQL 的二进制日志,它记录了所有的 DDL 和 DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL 的二进制日志是事务安全型的。二进制有两个最重要的使用场景:

① MySQL Replication 在 Master 端开启 Binlog,Master 把它的二进制日志传递给 Slaves来达到 Master-Slave 数据一致的目的。

② 数据恢复,通过使用 MySQL Binlog 工具来使恢复数据。二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的 DDL 和 DML(除了数据查询语句)语句事件

1.2 Binlog分类

MySQL Binlog 的格式有三种,分别是 STATEMENT,MIXED,ROW。在配置文件中可以选择配
置 binlog_format= statement|mixed|row。三种格式的区别
1)statement
语句级,binlog 会记录每次一执行写操作的语句。相对 row 模式节省空
间,但是可能产生不一致性,比如“update tt set create_date=now()”,如果用 binlog 日志进行恢复,由于执行时间不同可能产生的数据就不同。

优点:节省空间。
缺点:有可能造成数据不一致。

2)row
行级, binlog 会记录每次操作后每行记录的变化。

优点:保持数据的绝对一致性。因为不管 sql 是什么,引用了什么函数,只记录执行后的效果。
缺点:占用较大空间。

3)mixed
statement 的升级版,一定程度上解决了因为一些情况而造成的 statement
模式不一致问题,默认还是 statement,在某些情况下譬如:当函数中包含 UUID() 时;包含AUTO_INCREMENT 字段的表被更新时;执行 INSERT DELAYED 语句时;用 UDF 时;会按照ROW 的方式进行处理

优点:节省空间,同时兼顾了一定的一致性。
缺点:还有些极个别情况依旧会造成不一致,另外 statement 和 mixed 对于需要对binlog 的监控的情况都不方便。

综合上面对比,Canal 想做监控分析,选择 row 格式比较合适

1.3 Mysql主从复制

1)Master 主库将改变记录,写到二进制日志(Binary Log)中;
2)Slave 从库向 MySQL Master 发送 dump 协议,将 Master 主库的 binary log events 拷贝到它的中继日志(relay log);
3)Slave 从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库
在这里插入图片描述
Canal原理很简单,即伪装成mysql的slave节点,假装从Master拷贝数据。使用场景如下:
在这里插入图片描述

1.4 修改mysql配置文件

修改/etc/my.cnf文件如下内容
在这里插入图片描述

#开启binlog
log_bin = mysql-bin
#binlog日志类型
binlog_format = row
#MySQL服务器唯一id
server_id = 1
#设置需要同步的库
binlog-do-db=canal

binlog-do-db 根据自己的情况进行修改,指定具体要同步的数据库,如果不配置则表示所有数据库均开启 Binlog。修改完成后重启mysql生效

service mysql restart

1.5 测试binlog是否生效

建表

create table student (
	id varchar(20)
	,name varchar(20)
	,age int
	,sex varchar(5)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci;

插入数据

insert into student values('1001','zhangsan',18,'male');

对比查看未插入数据前binlog
在这里插入图片描述
可以看到binlog发生了变化,说明配置生效了。

1.6 Mysql中新建canal用户

CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

2 安装Canal

2.1 下载canal

进入官网下载canal安装包,这里以1.1.2版本为例

https://github.com/alibaba/canal/releases

2.2 创建canal文件夹并解压

这里的canal文件包解压后是很多文件,因此建议建立一个独立的文件夹用于存放解压后的文件。

mkdir canal
tar -zxvf canal.deployer-1.1.2.tar.gz -C ./canal

2.3 修改canal.properties 的配置

说明:
① 这个文件是 canal 的基本通用配置,canal 端口号默认就是 11111,修改 canal 的输出 model,默认 tcp,改为输出到 kafka.
② 多实例配置如果创建多个实例,通过前面 canal 架构,我们可以知道,一个 canal 服务中可以有多个 instance,conf/下的每一个 example 即是一个实例,每个实例下面都有独立的配置文件。默认只有一个实例 example,如果需要多个实例处理不同的 MySQL 数据的话,直接拷贝出多个 example,并对其重新命名,命名和配置文件中指定的名称一致,然后修改canal.properties 中的 canal.destinations=实例 1,实例 2,实例 3。
在这里插入图片描述

2.4 修改 instance.properties

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

vim instance.properties
  1. 配置Mysql服务器地址
#################################################
## mysql serverId , v1.0.26+ will autoGen
canal.instance.mysql.slaveId=10
# enable gtid use true/false
canal.instance.gtidon=false
# position info
canal.instance.master.address=wavehouse-3:3306

在这里插入图片描述

注意:这里的canal.instance.mysql.slaveId=10,只要和my.cnf中的server_id不一样即可,因为在这里canal是伪装成mysql的slave,因此id要不一样。

2)配置连接 MySQL 的用户名和密码,默认就是我们前面授权的 canal

canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
canal.instance.defaultDatabaseName =canal
# enable druid Decrypt database password
canal.instance.enableDruid=false

在这里插入图片描述

2.5 启动canal

./startup.sh

在这里插入图片描述

3 实时监控

3.1 创建maven项目

3.2 添加依赖

<dependencies>
 <dependency>
 <groupId>com.alibaba.otter</groupId>
 <artifactId>canal.client</artifactId>
 <version>1.1.2</version>
</dependency>
 <dependency>
 <groupId>org.apache.kafka</groupId>
 <artifactId>kafka-clients</artifactId>
 <version>2.4.1</version>
 </dependency>
</dependencies>

3.3 根据Canal的架构写代码

在这里插入图片描述

package com.chen.canal;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalConnectors;
import com.alibaba.otter.canal.protocol.CanalEntry;
import com.alibaba.otter.canal.protocol.Message;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;

import java.net.InetSocketAddress;
import java.util.List;

public class CanalClient {
    public static void main(String[] args) throws InvalidProtocolBufferException {
        //1.获取Canal连接对象
        CanalConnector canalConnector = CanalConnectors.newSingleConnector(new InetSocketAddress("192.168.2.202", 11111),
                "example", "", "");
        while (true){
            //2.获取连接
            canalConnector.connect();
            //3.指定需要监控的数据库
            canalConnector.subscribe("canal.*");
            //4.获取message
            Message message = canalConnector.get(100);
            //4.1获取entries
            List<CanalEntry.Entry> entries = message.getEntries();
            //4.2 判断是否有数据
            if(entries.size() <= 0){
                System.out.println("当前没有数据,休息一下~~~~");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else{
                //如果有数据,则进行遍历
                for (CanalEntry.Entry entry : entries) {
                    //5.获取表名
                    String tableName = entry.getHeader().getTableName();
                    //6.获取entryType
                    CanalEntry.EntryType entryType = entry.getEntryType();
                    //7.判断entryType类型是否未ROWDATA
                    if(CanalEntry.EntryType.ROWDATA.equals(entryType)){
                        //7.1如果是则序列化数据
                        ByteString storeValue = entry.getStoreValue();
                        //8.反序列化
                        CanalEntry.RowChange rowChange = CanalEntry.RowChange.parseFrom(storeValue);
                        //9.获取事件类型
                        CanalEntry.EventType eventType = rowChange.getEventType();
                        //10.获取具体的数据
                        List<CanalEntry.RowData> rowDatasList = rowChange.getRowDatasList();
                        //11.遍历打印数据
                        for (CanalEntry.RowData rowData : rowDatasList) {
                            //11.1获取before的数据
                            List<CanalEntry.Column> beforeColumnsList = rowData.getBeforeColumnsList();
                            //11.2新建JSON存放before数据
                            JSONObject beforeData = new JSONObject();
                            for (CanalEntry.Column column : beforeColumnsList) {
                                beforeData.put(column.getName(),column.getValue());
                            }
                            //11.3获取after数据
                            List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();
                            //11.4新建JSON存放after数据
                            JSONObject afterData = new JSONObject();
                            for (CanalEntry.Column column : afterColumnsList) {
                                afterData.put(column.getName(),column.getValue());
                            }
                            //12.打印
                            System.out.println("TableName: "+tableName+" ,EvenType: "+eventType+
                                    " ,Before: "+beforeData+",After: "+afterData);

                        }
                    }
                }
                
            }
        }
    }
}

3.3.1 插入数据

insert into student values('1002','lisi',28,'fe');

插入数据后我们可以发现是After更新,Before不更新,因为Before之前没有数据为空
在这里插入图片描述

3.3.2 插入多行数据

insert into student values('1003','wangwu',29,'fe'),('1004','zhaoliu',38,'male'),('1005','zhuqi',8,'male')

在这里插入图片描述

3.3.3 更新数据

update student set age=22 where id=1002;

在这里插入图片描述

更新数据会在before和after中均有数据,before是修改前数据,after则是修改后数据

3.3. 删除数据

delete from student where id=1003;

在这里插入图片描述
删除后数据不存在,所以before中有数据,而after中没有数据

3.4 Kafka模式测试

1)修改 canal.properties 中 canal 的输出 model,默认 tcp,改为输出到 kafka
在这里插入图片描述

2)修改 Kafka 集群的地址
在这里插入图片描述

3)修改 instance.properties 输出到 Kafka 的主题以及分区数
注意:默认还是输出到指定 Kafka 主题的一个 kafka 分区,因为多个分区并行可能会打乱 binlog 的顺序 , 如 果 要 提 高 并 行 度 , 首 先 设 置 kafka 的 分 区 数 >1, 然 后 设 置canal.mq.partitionHash 属性
在这里插入图片描述
4)启动 Canal
启动Canal之前,先启动kafka,启动kafka需要先启动zookeeper

bin/zkServer.sh start
bin/kafka-server-start.sh -daemon config/server.properties

在这里插入图片描述
5)看到 CanalLauncher 你表示启动成功,同时会创建 canal_test 主题
在这里插入图片描述

6)启动 Kafka 消费客户端测试,查看消费情况

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

7)向 MySQL 中插入数据后查看消费者控制台

insert into student values('1008','zhuba',29,'fe'),('1009','yangjiu',38,'male');

在这里插入图片描述
kafka是将插入后的多条数据写在json数组中

  1. 更新MySQL数据查看消费者控制台
update student set name='zhuba2' where id=1008;

在这里插入图片描述
更新后Kafka将old字段展示为旧的数据,data字段展示为新的数据
9)删除MySQL数据查看消费控制台

delete from student where id=1005;

在这里插入图片描述

超详细的Canal入门,看这篇就够了! Canal入门看这篇就够了! 阅读详情

相关推荐

Windows 搭建 Canal admin 和 Canal Server

windows 搭建 Canal admin UI 和Canal Server 实战

Julie的博客 2082

Canal简介及入门

MySQL的这个特性,是MySQL对标准SQL的一个扩展,从MySQL 3.22.15 引入,5.6已经不推荐使用,5.7已经不支持了(虽然能识别,但是已经被忽略掉,而且会生成ER_WARN_LEGACY_SYNTAX_CONVERTED警告),在后续的版本中会废弃掉。在此描述中,“线程”是接收到INSERT DELAYED语句的线程,“处理程序”是处理特定表的所有INSERT DELAYED语句的线程。线程执行INSERT语句,但不是将行写入表中,而是将最后一行的副本放入由处理程序线程管理的队列中。

weixin_55769150的博客 2232

【canal 中间件】canal 实时监听 binlog

看到 successful 之后,就代表 canal-server 启动成功,然后就可以在 canal-admin 上进行任务分配了。canal-server 和 canal-admin 在 Docker 里面的详细教程查看。注意,在没有修改配置文件并启动 MySQL 容器情况下,MySQL 会警告配置文件。在 MySQL 容器运行后,使用以下命令将创建的。在 canal 启动成功后,查看 admin 日志。在 canal 启动成功后,查看启动日志。进入 MySQL, 利用。注意,MySQL 容器的。

weixin_44814196的博客 2439

Canal使用详解

Canal是阿里巴巴开发的MySQL binlog增量订阅&消费组件,Canal是基于MySQL二进制日志的高性能数据同步系统。在阿里巴巴集团中被广泛使用,以提供可靠的低延迟增量数据管道。Canal Server能够解析MySQL Binlog并订阅数据更改,而Canal Client可以将更改广播到任何地方,例如数据库和。Canal支持所有平台,细粒度系统监视,通过不同方式解析和预订MySQL Binlog,以及高性能、实时数据同步。

技术人集结地 4208

docker搭建canal-server和canal-admin

上面两步完成后,使用java的canal客户端进行连接,可以看到定时获取binlog的日志打印,如果监控的库有更新插入,则会有相应的日志打印出来,要注意的问题是,使用了admin客户端和server连接后,我们的java客户端在连接的时候不能使用之前用的明文的密码canal进行连接,需要使用密文。再次启动java的canal-client,可以看到连接成功,正在定时获取binlog,如果监听的库有表的插入或更新,客户端就会打印出来。确实有,在mysql里面看看日志,到这里mysql就配置好了!...

weixin_40715787的博客 5786

【canal 中间件】canal 常见的启动方式

看到 successful 之后,就代表 canal-server 启动成功,然后就可以在 canal-admin 上进行任务分配了。canal-ployer 实际上就是 canal-server 的压缩文件,可以在本地启动。在 canal-admin 里面找不到数据库文件被删除,似乎不推荐使用外部数据库。事实上,这个可以不用指定数据库。canal-admin 在 Docker 中的详细安装教程请查看。使用以下命令执行脚本,启动 canal-admin 容器。canal-admin 文件存放在容器的。

weixin_44814196的博客 2534

深入理解Canal

Canal是一款基于数据库增量日志订阅和消费的开源产品,它能够捕获数据库的变更数据,并把这些变更数据传递给其他系统。(官网目前只支持mysql,支持pg等得用插件)它的作用是实时监控数据库变更,并将变更数据传输给其他系统,用于数据同步、数据分析等场景。

RuiKe的博客 4137

MIKE11实战:平原河网水动力建模从入门到精通(附GIS数据处理技巧)

本文系统介绍了MIKE11软件在平原河网水动力建模中的完整实战流程。从GIS数据预处理、河网构建、参数率定到结果分析,详细阐述了构建可靠数字孪生模型的关键步骤与技巧,旨在帮助水利工程师高效解决平原地区复杂水流模拟的挑战,为防洪决策提供科学依据。

weixin_28419039的博客 689

Canal

一: Canal概述         canal是由Alibaba开源的一个基于binlog的增量日志组件,其核心原理是canal伪装成Mysql的slave,发送dump协议获取binlog,解析并存储起来给客户端消费。                       二: 什么是binlog?          binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任...

weixin_44587366的博客 1271

企业微信——智能表格学习

企业微信报表

qq_15138049的博客 1万+

EPICS pythonSoftIOC教程

EPICS pythonSoftIOC教程

yuyuyuliang00的博客 1521

超详细的canal使用总结

超详细的canal使用总结 canal的介绍 ​ canal,译意为水道/管道/沟渠,从官网的介绍中可以知道,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 ​ 这是一张官网提供的示意图: 官网的解释最权威,我就直接引用一下官网的原话,另,附上官网地址:https://github.com/alibaba/canal 基于日志增量订阅和消费的业务包括 数据库镜像 数据库实时备份 索引构建和实时维护(拆分异构索引、倒排索引等) 业务 cache 刷新 带业务逻辑的增量数据处理

小飞的博客 1万+

解题报告-美团点评2017秋招笔试编程题--常见动态规划问题

晚上就要美团笔试了,在牛客上刷套美团的题练练手,四道题目全都是典型题目,经典的连题面都懒得改那种,也都不难,很基础的动态规划问题。[编程题] 大富翁游戏时间限制:1秒空间限制:32768K大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n&lt;=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。 输...

聂小白的专栏 1719

大数据技术之Canal入门篇

大数据技术之Canal入门篇

优快云2022博客之星Top39;华为云博主7&,优快云、稀土掘金、微信公众号、阿里云开发者社区、腾讯云社区、博客园、知乎、51CTO同名博主WHYBIGDATA; 1万+

Mac用户必看:Typora最新版永久激活+弹窗屏蔽保姆级教程(附崩溃解决方案)

本文为Mac用户提供了一份详尽的Typora最新版永久激活与弹窗屏蔽教程。通过修改关键JS文件,实现软件激活状态并彻底关闭成功提示弹窗。文章深入剖析了操作原理,并重点提供了解决由此引发的多文档崩溃问题的实用临时方案,同时客观讨论了该方法的局限性与潜在风险。

wine的专栏 2360

Java开发者必看:WPS Office在线预览接入实战(含回调配置避坑指南)

本文为Java开发者提供了WPS Office在线预览功能的完整接入实战指南。详细解析了从服务申请、生成带签名的访问URL,到实现核心回调接口(文件信息、用户信息、文件保存)的全流程,并重点分享了签名算法与回调配置中的关键避坑点,帮助开发者高效集成,提升Web应用文档处理体验。

vodka的博客 1328

canal简介及canal部署、原理和使用介绍

阿里canal简介及canal部署、原理和使用介绍 canal入门 什么是canal 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。 canal是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,canal主要支持了MySQL的binlog解析,解析完成后才利用canal cli

wt334502157的博客 3万+

ERROR: Ignored the following yanked versions: 0.8.3, 0.10.19.dev18 的解决办法

关于这个问题,博主是在进行项目中的python依赖包安装的时候遇见的,遇到的异常:关于这个问题,是在。

Spring Boot-Common On With You 643

canal介绍和使用docker安装canal

概述 1.1 背景 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。 基于日志增量订阅和消费的业务包括 数据库镜像 数据库实时备份 索引构建和实时维护(拆分异构索引、倒排索引等) 业务 cache 刷新 带业务逻辑的增量数据处理 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x ,

qq_41358574的博客 3637

如何设置反馈点

前面的POWER DC仿真都是忽略反馈线进行的仿真,如果单板压降不过,电源会自动调整输出电压,来满足负载的得到额定的电压.可以看到因为设置了反馈点,源端电压就被抬高到满足压降的值了。仿真上也可以自己添加反馈点,以得到抬高后的电源输出电压值。同样以下图的CPU的Core电源为例。按照流程正常设置好参数。

weixin_54787054的博客 1147

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

canal框架的详细使用

Canal的搭建 一. mysql的配置 修改 my.ini 文件 mysqld] character-set-server=utf8 basedir=E:\mysql\mysql-5.7.21-winx64 datadir=E:\mysql\mysql-5.7.21-winx64\data # servier-id 是一个数字 server-id=2 # 开启mysql的binlog log-bin=mysql-bin # binlog记录的操作的格式 binlog-format=ROW # 表

sylvia_lily的博客 1764

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

springboot canal监听_超详细canal入门,看这篇就够了

思维导图 本文章已收录到个人博客网站(我爱B站):http://me.lovebilibili.com前言我们都知道一个系统最重要的是数据,数据是保存在数据库里。但是很多时候不单止要保存在数据库中,还要同步保存到Elastic Search、HBase、Redis等等。这时我注意到阿里开源的框架Canal,他可以很方便地同步数据库的增量数据到其他的存储应用。所以在这里总结一下,分享给各位读者参考~...

weixin_39575410的博客 3863

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Docker 安装 canal 详细步骤

本文详细介绍了基于Docker部署Canal实现MySQL数据库增量数据订阅的完整流程。主要内容包括:1)Canal工作原理,通过模拟MySQL从库获取二进制日志实现数据变更捕获;2)Docker环境搭建,创建专用网络并部署MySQL、Canal-admin和Canal-server服务;3)关键配置详解,包括MySQL的binlog开启、Canal连接参数及实例配置;4)Go语言客户端实现数据变更监听的具体代码示例。文章还提供了常见问题排查方法,如内存不足导致服务启动失败的解决方案。

longchanghua_enshi的专栏 2079

Canal的详细解释(小白无痛版!!!)

Binlog,全称Binary Log(二进制日志),是 MySQL 的一种日志文件,主要用来记录数据库的所有写操作,比如INSERTUPDATEDELETE,但是不记录查询操作(SELECT它的作用相当于一个“黑匣子”✈️:👉记录数据库发生过的改变;👉重播这些改变,实现恢复或者同步。

weixin_44748929的博客 3564

【Canal】实现原理和搭建方案

canal.adapter,相当于canal的客户端,会从canal-deployer中获取数据,然后对数据进行同步,可以同步到MySQL、Elasticsearch和HBase等存储中去。(1)全局配置:conf/application.properties(也可以是conf/application.yml,连接 Canal-Server、配置同步目标、全局参数)下载canal.deployer,可以直接监听MySQL的binlog,把自己伪装成MySQL的从库,只负责接收数据,并不做处理。

weixin_44823875的博客 941

canal工作原理及简单案例演示

1.CANAL是什么 canal是阿里巴巴旗下的一款开源项目,纯Java开发。 https://github.com/alibaba/canal 1.1. CANAL的历史 canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据

寻找手艺人的专栏 1044
上一篇: [BUG]The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]
下一篇: Doris-1.2.0升级到Doris-1.2.4
不以物喜2020
博客等级 码龄8年 85粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值