目录
一、什么是canal
Canal是阿里巴巴的数据同步工具,最初主要为了应对杭州和美国的双机房部署问题,目前也是国内互联网企业经常使用的数据增量同步解决方案。 Canal是一种开源的、基于数据库的分布式数据变更日志解析和传输的工具。它主要用于实时同步数据库的数据变更到其他系统,例如缓存、搜索引擎、数据仓库等。
Canal通过解析数据库的二进制日志(binlog),获取数据库的数据变更信息,并将这些变更信息按照事务的顺序进行组织和传输。它支持MySQL、Oracle等主流关系型数据库,并提供了丰富的API和插件,可以方便地对数据进行处理和扩展。
使用Canal可以实现数据的实时同步和灵活的数据处理。其主要特点包括:
- 实时性:Canal可以实时地解析和传输数据库的数据变更,保证数据的准确性和实时性。
- 灵活性:Canal支持自定义的数据处理逻辑,可以根据业务需求对数据进行过滤、转换和处理。
- 可靠性:Canal通过监控数据库的binlog来捕获数据变更,不会对数据库的性能和稳定性产生影响。
- 分布式架构:Canal支持分布式部署,可以在多台机器上进行协同工作,提高系统的吞吐量和可扩展性。
二、为什么使用canal
-
实时数据同步:Canal能够实时解析数据库的变更日志,将数据的变更信息传输到其他系统。这对于需要实时获取数据库变更并将其同步到其他业务系统(如缓存、搜索引擎、数据仓库等)的情况非常有用。通过Canal可以保证其他系统中的数据与数据库中的数据保持一致性,实现数据的实时同步。
-
数据分析和统计:利用Canal可以获取数据库的变更信息,进而进行数据分析和统计。比如,可以通过Canal将数据库中的数据变更传输到数据仓库或大数据平台,进行实时的数据分析和统计。这样可以实现对数据的实时监控、在线分析等功能,支持实时决策和业务优化。
-
数据库解耦和迁移:在微服务架构中,多个微服务可能依赖于同一个数据库。但是为了实现解耦和灵活部署,可以使用Canal将数据库的变更信息传输到每个微服务的本地缓存或数据库中。这样每个微服务就可以独立地操作自己的数据源,不会相互干扰,提高了系统的可伸缩性和性能。
-
数据备份和恢复:Canal可以将数据库的变更日志进行实时传输,可以用于数据备份和灾难恢复。通过Canal,可以将数据库的变更日志传输到备份服务器或云存储中,确保数据的安全性和可靠性。在出现数据库故障或数据丢失的情况下,可以根据备份的变更日志进行数据的快速恢复。
三、canal的实现原理是什么
是伪装成mysql主从复制(Master-Slave Replication)架构中的从属角色的数据库服务器,来实现功能。
-
Canal将自己伪装为MySQL的slave,通过向MySQL的master发送dump协议请求,获取数据库的初始数据快照。
-
MySQL的master接收到dump协议请求后,会将数据快照发送给Canal,同时将之后的数据修改操作以二进制日志(binary log)的形式推送给Canal。
-
Canal解析接收到的binary log,将其转换为增量数据变更。它会逐条解析binary log事件,包括事务的开始和提交,以及对表的数据进行的插入、更新和删除操作等。
-
Canal组织并传输增量的数据变更消息给其他系统,如Elasticsearch(ES)、Redis等。这些消息包含变更类型(插入、更新、删除)、表名、字段名和对应的变更值等信息。
-
接收到数据变更消息的其他系统可以根据业务需求进行数据处理和消费。例如,将变更消息写入ES进行全文搜索,或者更新缓存中的数据,以实现实时同步、数据分析和统计等功能。
四、在liunx上安装canal
1.官方仓库下载
Releases · alibaba/canal (github.com)
点击版本号就能进入下载
canal.adapter-1.1.7-SNAPSHOT.tar.gz(236 MB):这是Canal的适配器(adapter)组件。它用于将Canal的变更事件传递给其他数据存储或消息队列系统,例如Kafka、RocketMQ等。 canal.admin-1.1.7-SNAPSHOT.tar.gz(37.5 MB):这是Canal的管理后台(admin)组件。它提供了一个Web界面,用于管理和监控Canal实例的配置和状态。
canal.deployer-1.1.7-SNAPSHOT.tar.gz(102 MB):这是Canal的部署者(deployer)组件。它用于在集群环境下管理和部署Canal实例。
canal.example-1.1.7-SNAPSHOT.tar.gz(23.1 MB):这是Canal的示例(example)组件。它包含了一些使用Canal的示例代码和配置文件,可以帮助您更好地理解和使用Canal。
Source code (zip) 和 Source code (tar.gz):这是Canal的源代码压缩包,分别以zip和tar.gz格式提供。如果想查看Canal的源代码,或者进行自定义编译和定制化部署,可以下载这些压缩包。
如果您只需要使用Canal作为数据变更的中间件,并将变更事件传递给其他系统进行处理,那么只需要下载和安装canal.adapter-1.1.7-SNAPSHOT.tar.gz
即可。
而如果您需要在分布式环境中使用Canal,并管理多个Canal实例,则需要下载和安装canal.deployer-1.1.7-SNAPSHOT.tar.gz
我们要部署到项目中所以下载 canal.deployer-1.1.7-SNAPSHOT.tar.gz(102 MB)
点击之后就能下载
下载完成之后使用 finalshell 将压缩包拖入 /usr/local 然后canal新建文件夹,将其解压到文件夹中
cd /usr/local
mkdir canal
tar -vxf canal.deployer-1.1.7-SNAPSHOT.tar.gz -C canal
五、配置canal
1、查看mysql是否启用二进制日志
SHOW VARIABLES LIKE '%log_bin%'
log_bin:指示是否启用二进制日志。如果值为 ON,则表示启用;如果值为 OFF,则表示禁用。
log_bin_basename:指定二进制日志文件的基本名称。
log_bin_index:指定二进制日志索引文件的位置。
log_bin_trust_function_creators:控制是否信任具有 SUPER 权限的创建函数的用户。
我们要确保 log_bin为ON,我这里是默认配置所以为ON,但是默认的配置并不方便我们后续使用
我们要去配置文件那里修改 一般liunx的配置在/etc/my.cnf
cd /etc
vi my.cnf