如何实现 Debezium MySQL

Debezium 是一个开源的分布式事件捕获 (CDC) 平台,用于实时捕获数据库的变更事件。本文将为刚入行的小白介绍如何在 MySQL 上使用 Debezium。我们将通过一个简单的流程和示例代码逐步深入理解。

流程概述

我们将按照以下步骤来实施 Debezium MySQL:

步骤 描述
1 安装 Docker 和 Docker Compose
2 创建 Debezium 配置文件
3 启动 MySQL 服务
4 启动 Debezium 服务
5 测试变更捕获
6 查看 Debezium 捕获的事件

甘特图

gantt
    title Debezium MySQL 实现步骤
    dateFormat  YYYY-MM-DD
    section 准备阶段
    安装 Docker             :a1, 2023-10-01, 1d
    创建配置文件           :a2, after a1, 1d
    section 实施阶段
    启动 MySQL              :a3, after a2, 1d
    启动 Debezium          :a4, after a3, 1d
    section 测试阶段
    测试变更捕获          :a5, after a4, 1d
    查看 Debezium 事件    :a6, after a5, 1d

步骤详解

1. 安装 Docker 和 Docker Compose

首先,我们需要安装 Docker 和 Docker Compose。可以访问 Docker 的官方网站([Docker官网](

2. 创建 Debezium 配置文件

在项目目录下,我们需要创建一个名为 docker-compose.yml 的文件,内容如下:

version: '3.1'
services:
  zookeeper:
    image: debezium/zookeeper:latest
    ports:
      - "2181:2181"
  
  kafka:
    image: debezium/kafka:latest
    ports:
      - "9092:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"

  debezium:
    image: debezium/connect:latest
    depends_on:
      - kafka
      - mysql
    ports:
      - "8083:8083"

此配置文件启动了四个服务:Zookeeper、Kafka、MySQL 和 Debezium。

3. 启动 MySQL 服务

运行以下命令来启动所有服务:

docker-compose up -d
  • docker-compose up -d: 以后台模式启动 Docker 服务。

4. 启动 Debezium 服务

接下来,我们需要配置 Debezium 连接 MySQL。创建一个名为 register-mysql.json 的文件,内容如下:

{
  "name": "mysql-connector",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "tasks.max": "1",
    "database.hostname": "mysql",
    "database.port": "3306",
    "database.user": "root",
    "database.password": "root",
    "database.dbname": "testdb",
    "database.server.id": "184054",
    "database.server.name": "dbserver1",
    "table.whitelist": "testdb.your_table",
    "database.history.kafka.bootstrap.servers": "kafka:9092",
    "database.history.kafka.topic": "dbhistory.fullfillment"
  }
}

将此文件通过 REST API 注册到 Debezium:

curl -X POST -H "Content-Type: application/json" --data @register-mysql.json http://localhost:8083/connectors
  • curl -X POST: 向 Debezium 发送注册请求。

5. 测试变更捕获

在 MySQL 中创建一个表并插入数据:

CREATE TABLE your_table (id INT PRIMARY KEY, name VARCHAR(255));
INSERT INTO your_table (id, name) VALUES (1, 'test');

6. 查看 Debezium 捕获的事件

可以使用 Kafka-cli 工具查看主题中的数据:

kubectl run kafka-console-consumer --image=confluentinc/cp-kafka:latest -- \
  kafka-console-consumer --bootstrap-server kafka:9092 --topic dbserver1.testdb.your_table --from-beginning
  • kafka-console-consumer: 消费者命令行工具,用于查看 Kafka 消息。

结论

通过本教程,我们完成了在 MySQL 中使用 Debezium 的流程。从安装 Docker 到配置 Debezium 连接,最终捕获数据库中的变更事件。这是一个强大的工具,可以帮助我们实现实时数据处理。希望对你有所帮助,让我们一起在开发道路上继续前行!