返回

揭秘 Alibaba Canal 本地搭建的奥秘:Mac 环境下的踩坑指南

见解分享

在 Mac 环境下搭建 Alibaba Canal:从入门到精通

概述

Alibaba Canal 是一款开源的实时数据传输工具,可以让你轻松地在不同的系统和数据库之间同步数据。它在分布式系统的数据同步领域备受推崇,但其本地搭建过程并非易事,尤其是在 Mac 环境下。本文将指导你完成在 Mac 上搭建 Alibaba Canal 的每一步,并分享一些常见的踩坑经验,助你避开搭建中的烦恼。

准备工作

在开始搭建之前,你需要确保你的 Mac 满足以下要求:

  • Java 8 或更高版本
  • MySQL 5.7 或更高版本
  • Docker

搭建步骤

1. Canal Server 搭建

首先,拉取 Canal Server 镜像:

docker pull canal/canal-server:latest

然后运行容器:

docker run -it --rm --name canal-server -p 3306:3306 -e CANAL_ADDR=canal-server -e CANAL_PORT=3306 canal/canal-server:latest

2. Canal Connector 搭建

接下来,拉取 Canal Connector 镜像:

docker pull canal/canal-connector:latest

然后运行容器:

docker run -it --rm --name canal-connector -p 11111:11111 -e CANAL_ADDR=canal-server -e CANAL_PORT=3306 canal/canal-connector:latest

3. 订阅配置

修改 canal.properties 配置文件:

vi /usr/local/canal/conf/canal.properties

设置订阅信息:

destinations=example

设置过滤规则:

filter=.*\\..*

4. 启动 Canal

启动 Canal Server:

docker start canal-server

启动 Canal Connector:

docker start canal-connector

踩坑记录

1. Canal Server 启动失败

  • 原因:端口冲突
  • 解决方法:停止其他占用 3306 端口的进程

2. Canal Connector 无法连接 Canal Server

  • 原因:IP 地址不正确
  • 解决方法:修改 canal.properties 中的 CANAL_ADDR 为 Canal Server 的 IP 地址

3. 无 Canal 日志输出

  • 原因:日志级别设置过低
  • 解决方法:修改 logback.xml 配置文件,将日志级别设置为 INFO

4. 无法订阅数据库表

  • 原因:过滤规则不正确
  • 解决方法:检查 filter 配置,确保其符合预期

5. Docker 镜像拉取失败

  • 原因:网络问题
  • 解决方法:检查网络连接,或使用加速器

常见问题解答

  1. 如何查看 Canal 日志?

答:可以使用以下命令查看 Canal Server 日志:

docker logs canal-server
  1. 如何配置 Canal Connector 连接到特定的数据库?

答:在 canal.properties 配置文件中添加以下属性:

canal.instance.dbUsername=你的数据库用户名
canal.instance.dbPassword=你的数据库密码
canal.instance.filter=你的过滤规则
  1. 如何订阅多个数据库表?

答:在 canal.properties 配置文件中的 destinations 属性中添加多个表名,用逗号分隔:

destinations=table1,table2,table3
  1. 如何使用 Canal Connector 消费数据?

答:可以使用以下代码示例创建一个简单的消费者:

import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalMessageParser;
import com.alibaba.otter.canal.client.Message;
import com.alibaba.otter.canal.protocol.CanalEntry;
import com.alibaba.otter.canal.protocol.MessageEntry;

public class SimpleConsumer {

    public static void main(String[] args) {
        // 创建 Canal 连接器
        CanalConnector connector = new CanalConnectorImpl();

        // 连接到 Canal Server
        connector.connect();

        // 订阅数据库表
        connector.subscribe();

        // 获取 Canal 消息
        Message message = connector.get();

        // 解析 Canal 消息
        CanalMessageParser parser = new CanalMessageParser();
        MessageEntry entry = parser.parseOne(message.getEntries());

        // 处理 Canal 消息
        for (CanalEntry.Entry entry1 : entry.getEntryList()) {
            System.out.println(entry1.getHeader().getTableName());
            System.out.println(entry1.getHeader().getEventType());
            System.out.println(entry1.getAfterColumnsList());
        }

        // 退出 Canal 连接器
        connector.disconnect();
    }
}
  1. 如何自定义 Canal 的日志输出格式?

答:可以在 logback.xml 配置文件中修改日志输出格式:

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

结论

按照上述步骤并规避常见踩坑,你就可以成功在 Mac 环境下搭建 Alibaba Canal。这将为你提供一个强大的数据传输工具,助力你打造高效的数据同步系统。