点一下关注吧!!!非常感谢!!持续更新!!!
Java篇开始了!
- MyBatis 更新完毕
- 目前开始更新 Spring,一起深入浅出!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(已更完)
- Kylin(已更完)
- Elasticsearch(已更完)
- DataX(已更完)
- Tez(已更完)
- 数据挖掘(已更完)
- Prometheus(已更完)
- Grafana(已更完)
- 离线数仓(已更完)
- 实时数仓(正在更新…)
章节内容
- Canal MySQL的binlog研究
- 存储目录
- 变动信息
- 配置MySQL
Canal 简介
Canal 是阿里巴巴开源的数据同步工具,用于 MySQL 数据库的增量日志解析和同步。它模拟 MySQL 从库协议,获取主库的 binlog 日志,从而实现实时数据捕获和传输,常用于数据迁移、缓存更新和搜索引擎同步等场景。
环境准备
- 操作系统:Linux/Windows/MacOS(推荐 Linux)
- Java 环境:JDK 1.8 或以上
- 数据库环境:MySQL 5.6 及以上版本,并开启 binlog 日志
- Zookeeper 集群:用于分布式协调(可选)
Canal 安装
我的 MySQL 在 h122 节点,所以我就把 Canal 放到了 h123 节点上。
下载项目
https://github.com/alibaba/canal/releases
你可以使用各种方式,这里为了方便,我用 1.1.4
cd /opt/software
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
过程如下图所示:
配置项目
mkdir /opt/servers/canal
tar -zxvf canal.deployer-1.1.4.tar.gz -C /opt/servers/canal
我们查看结果如下:
修改配置
conf/canal.properties
cd /opt/servers/canal
vim conf/canal.properties
这个文件是 Canal 的基本通用设置,主要关心一下端口号,不改的话默认就是 11111,修改内容如下:
# 配置zookeeper地址
canal.zkServers = h121.wzk.icu:2181,h122.wzk.icu:2181,h123.wzk.icu
# tcp, kafka, RocketMQ
canal.serverMode = kafka
# 配置kafka地址
canal.mq.servers = h121.wzk.icu:9092,h122.wzk.icu:9092,h123.wzk.icu
对应的内容如下所示:
conf/example/instance.properties
cd /opt/servers/canal
vim conf/example/instance.properties
这个文件是针对要追踪的 MySQL 的实例配置:
# 配置MySQL数据库所在的主机
canal.instance.master.address = h122.wzk.icu:3306
# username/password,配置数据库用户和密码
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
# mq config,对应Kafka主题:
canal.mq.topic=dwshow
配置如下所示:
启动服务
sh bin/startup.sh
执行结果如下图所示:
关闭服务
sh bin/stop.sh
执行结果如下图:
注意事项
上面的配置是单机模式,也可以将 Canal 搭建集群模式。
如果要搭建集群模式,可以将 Canal 目录分发给其他机器,然后在各自的节点中分别启动 Canal。
这种 zookeeper 为观察者监控的模式,只要能实现高可用,而不是负载均衡,即同一时间点只有一个 canal-server 节点能够监控到某个数据源,只要这个节点能够正常工作,那么其他监控这个数据源的 canal-server 就只能做 stand-by,直到工作节点停止掉,其他 canal-server 节点才能够抢占到。
Canal 集群部署
集群模式简介
Canal 集群模式通常结合 ZooKeeper 实现分布式协调,保证高可用性和负载均衡。以下为三种常见集群方案:
- 独立实例模式:多个 Canal 实例独立运行,适合小规模场景。
- HA 模式:基于 ZooKeeper 实现主备切换,提高可靠性。
- 分布式模式:结合 Kafka/RocketMQ,实现更高吞吐量的分布式同步。
常见问题解决
连接失败
确保数据库 binlog 已开启,并设置为 ROW 模式:
SHOW VARIABLES LIKE 'binlog_format';
确保数据库授权正确
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
无法获取 binlog 数据
确认 MySQL 日志配置
SHOW VARIABLES LIKE 'log_bin';
Kafka 消费延迟高
调整 Kafka 分区和副本数,提高消费速率。
测试与监控
客户端测试
下载 Canal 客户端 SDK
<dependency>
<groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
<version>1.1.6</version>
</dependency>
编写消费数据代码
CanalConnector connector = CanalConnectors.newSingleConnector(
new InetSocketAddress("127.0.0.1", 11111), "example", "", "");
connector.connect();
connector.subscribe(".*\\..*");
connector.rollback();
while (true) {
Message message = connector.get(100);
for (Entry entry : message.getEntries()) {
System.out.println(entry.toString());
}
}
状态监控
检查 Canal 服务状态
jps
查看日志错误信息
tail -f logs/canal/canal.log
使用 Prometheus 或 Grafana 监控 Canal 服务指标。
结果
Canal 是一个功能强大的数据同步工具,结合集群和消息队列使用,可以满足复杂的实时数据同步需求。配置集群模式时,需要合理规划 ZooKeeper、Kafka 和 Canal 实例之间的协调,并结合监控工具,保障高可用性与稳定性。