Debezium 3.4的安装部署,其核心是作为插件集成到Apache Kafka Connect框架中来工作。根据环境,可以选择不同的部署方式。

下面的表格汇总了三种主流部署方式:

特性

基于Kafka Connect安装

使用Docker Compose

在Kubernetes上部署

核心描述

经典部署方式,手动配置Kafka生态各组件及Debezium插件。

通过容器编排快速拉起所有服务,适合开发、测试和快速体验

利用Operator在K8s集群中声明式地部署和管理,适合云原生生产环境

优点

对各组件控制力强,便于理解架构和深度定制。

环境隔离好,搭建极快,依赖管理简单。

弹性伸缩,高可用,易于集成到现有的K8s运维体系中。

缺点

步骤繁琐,需要手动维护多个组件。

配置封装在容器内,调试和定制相对复杂。

需要具备Kubernetes知识,前期配置有一定复杂度。

适用场景

学习原理、生产环境定制化部署、无容器化需求的环境。

功能验证、开发测试、快速原型搭建。

大规模、需要自动化运维的生产环境。

📦 基于Kafka Connect手动安装(核心步骤)

这是最经典的部署方式,主要包括安装Kafka生态、配置Connect以及注册Debezium连接器。

1. 环境准备

  • Java环境:确保已安装JDK 17或更高版本。

  • Kafka环境:需要运行Kafka Broker和Kafka Connect服务。可以从Apache官网下载并安装。

2. 安装Debezium连接器插件

  • Debezium官网下载对应数据库(如MySQL、PostgreSQL)的连接器插件包(通常是.zip.tar.gz格式)。

创建kafka插件目录:mkdir -p /home/phoenix/apps/kafka_2.13-3.9.1/plugins

下载连接器到plugins目录下

下面链接中包含多种数据库的连接器:
https://debezium.io/documentation/reference/3.4/install.html

-- mariadb
wget https://repo1.maven.org/maven2/io/debezium/debezium-connector-mariadb/3.4.0.Final/debezium-connector-mariadb-3.4.0.Final-plugin.tar.gz

-- mysql
wget https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/3.4.0.Final/debezium-connector-mysql-3.4.0.Final-plugin.tar.gz

-- postgresql
wget https://repo1.maven.org/maven2/io/debezium/debezium-connector-postgres/3.4.0.Final/debezium-connector-postgres-3.4.0.Final-plugin.tar.gz

-- mongodb
wget https://repo1.maven.org/maven2/io/debezium/debezium-connector-mongodb/3.4.0.Final/debezium-connector-mongodb-3.4.0.Final-plugin.tar.gz

-- jdbc sink 
wget https://repo1.maven.org/maven2/io/debezium/debezium-connector-jdbc/3.4.0.Final/debezium-connector-jdbc-3.4.0.Final-plugin.tar.gz
  • 将插件包解压到Kafka Connect的插件路径plugin.path)下。例如,目录 /home/phoenix/apps/kafka_2.13-3.9.1/plugins,并在 connect-distributed.properties 配置文件中设置 plugin.path,各个插件都有各自的子目录,配置时只需要配置根目录 /home/phoenix/apps/kafka_2.13-3.9.1/plugins即可。

修改kafka connect配置文件:

vim /home/phoenix/apps/kafka_2.13-3.9.1/config/connect-distributed.properties

# 修改 plugin.path,直接写根目录,connect会自动扫描子目录
plugin.path=/home/phoenix/apps/kafka_2.13-3.9.1/plugins
  • 确保插件目录的权限允许Kafka Connect进程读取。

3. 配置并启动Kafka Connect

以分布式模式启动Kafka Connect服务,分别在各个connect节点执行下面命令:

/home/phoenix/apps/kafka_2.13-3.9.1/bin/connect-distributed.sh /home/phoenix/apps/kafka_2.13-3.9.1/config/connect-distributed.properties

或者:
sudo systemctl start kafkaconnect.service

查看connect

# 查看connect基本信息

curl -s http://192.168.1.211:8083

# 查看插件:

curl -s http://192.168.1.211:8083/connector-plugins

# 列出 connectors:

curl -s http://192.168.1.211:8083/connectors

4. 注册Debezium连接器

通过Kafka Connect的REST API提交一个JSON配置来注册连接器。以下是一个MySQL连接器的配置示例,你需要替换其中的连接信息:

{
  "name": "mysql-connector-test",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "database.hostname": "192.168.1.183",
    "database.port": 3306,
    "database.user": "debezium",
    "database.password": "654321",
    "database.server.id": 184055,
    "database.server.name": "myqlserver184055",
    "database.include.list": "finance",
    "schema.history.internal.kafka.bootstrap.servers": "192.168.1.211:9092,192.168.1.212:9092,192.168.1.213:9092",
    "schema.history.internal.kafka.topic": "mysql-connector-test-finance",
    "snapshot.mode": "initial",
    "topic.prefix": "mysql-connector-test"
  }
}

创建topic:

/home/phoenix/apps/kafka_2.13-3.9.1/bin/kafka-topics.sh --create --bootstrap-server 192.168.1.211:9092 \
  --topic mysql-connector-test-finance \
  --partitions 1 --replication-factor 3 \
 --config cleanup.policy=compact

使用curl命令注册:

-- 注册connector
curl -X POST -H "Content-Type: application/json" \
  --data @/home/phoenix/apps/kafka_2.13-3.9.1/debezium/mysql-connector-test.json \
  http://192.168.1.211:8083/connectors

-- 更新配置
curl -X PUT -H "Content-Type: application/json" \
  --data @/home/phoenix/apps/kafka_2.13-3.9.1/debezium/mysql-connector-test.json \
  http://192.168.1.211:8083/connectors/mysql-connector-test/config

-- 删除connector
curl -X DELETE http://192.168.1.211:8083/connectors/mysql-connector-test

5. 验证部署

  • 检查连接器状态:curl http://192.168.1.211:8083/connectors/mysql-connector-test/status

  • 查看Kafka中是否生成了对应的主题:kafka-topics.sh --list --bootstrap-server 192.168.1.211:9092

  • 消费主题消息,确认能捕获到数据变更事件。

⚙️ 关键配置与注意事项

  • 数据库配置:必须在源数据库启用CDC功能。例如,MySQL需开启binlog;PostgreSQL需设置wal_level = logical并创建发布(Publication)。

  • 连接器配置:重点关注 database.server.name(主题名前缀)、database.history.kafka.topic(模式历史存储位置)以及快照模式snapshot.mode

  • 主题规划:Debezium会创建多个Kafka主题。对于数据库模式历史主题,建议设置为单分区、多副本、长期保留,以确保数据一致性。