点一下关注吧!!!非常感谢!!持续更新!!!

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

大数据-265 实时数仓 - Canal 部署安装 启动服务 常见问题解决_kafka

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

过程如下图所示:

大数据-265 实时数仓 - Canal 部署安装 启动服务 常见问题解决_大数据_02

配置项目

mkdir /opt/servers/canal 
tar -zxvf canal.deployer-1.1.4.tar.gz -C /opt/servers/canal

我们查看结果如下:

大数据-265 实时数仓 - Canal 部署安装 启动服务 常见问题解决_kafka_03

修改配置

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

对应的内容如下所示:

大数据-265 实时数仓 - Canal 部署安装 启动服务 常见问题解决_大数据_04

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

配置如下所示:

大数据-265 实时数仓 - Canal 部署安装 启动服务 常见问题解决_flink_05

启动服务

sh bin/startup.sh

执行结果如下图所示:

大数据-265 实时数仓 - Canal 部署安装 启动服务 常见问题解决_flink_06

关闭服务

sh bin/stop.sh

执行结果如下图:

大数据-265 实时数仓 - Canal 部署安装 启动服务 常见问题解决_大数据_07

注意事项

上面的配置是单机模式,也可以将 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 实例之间的协调,并结合监控工具,保障高可用性与稳定性。