编程 Debezium:基于 CDC 的数据库变更捕获平台,三种部署方式与场景梳理

2026-09-04 23:30:30

Debezium:基于 CDC 的数据库变更捕获平台,三种部署方式与场景梳理

Debezium 是 Red Hat 开源的分布式平台,基于变更数据捕获(CDC)实现数据库变更事件的实时捕获与传播。常见使用场景:

  • 实时数据集成:将数据库变更同步到数据仓库或数据湖,支撑实时分析。
  • 维护缓存一致性:源端数据库变更时自动失效或更新 Redis/Memcached 中的缓存条目。
  • 微服务解耦:单体应用拆分场景中,避免多系统"双写"带来的一致性问题,通过 CDC 触发下游业务逻辑(如更新搜索索引、发送通知)。
  • 共享数据库:多个应用共用同一个数据库时,一个应用提交的更改需要被其他应用感知。Debezium 让每个应用直接监控数据库更改并响应。
  • 命令查询职责分离(CQRS):捕获数据更改并持久化到全序流,供需要异步更新只读视图的服务消费。

系统架构

Debezium 提供三种部署架构:Apache Kafka Connect、独立服务器、嵌入式引擎。

Apache Kafka Connect

大多数情况下使用 Apache Kafka Connect 部署 Debezium,其中:

  • Debezium 作为源端连接器,将变更记录发送给 Kafka;
  • 目标连接器将记录从 Kafka 主题传播到其他系统。

Debezium 提供 MySQL、PostgreSQL 连接器分别捕获这两种数据库的变更。每个 Debezium 连接器都会建立对应的源端数据库连接:

  • MySQL 连接器使用客户端代码库访问 binlog;
  • PostgreSQL 连接器从逻辑复制流读取。

Kafka Connect 以独立服务方式运行。

默认情况下,单张表的变化被写入对应表名的 Kafka 主题。可以通过配置主题路由转换调整目标主题名称,例如:

  • 将记录路由到名称与表名不同的主题;
  • 将多个表的变更事件记录到同一个主题。

事件记录保存到 Kafka 后,Kafka Connect 生态中的不同连接器可将记录传输到 Elasticsearch、数据仓库、分析系统或缓存等系统。

独立服务器

另一种部署方式是使用 Debezium 服务器:配置源端连接器捕获数据库变更,序列化为 JSON 或 Apache Avro 等格式,再发送到 Redis、Amazon Kinesis、Google Cloud Pub/Sub 或 Apache Pulsar 等消息平台。

嵌入式引擎

该方式不依赖 Kafka Connect,直接将 Debezium 连接器作为代码库嵌入 Java 应用程序,捕获数据变更后供应用使用,或将数据流转发给消息平台。

功能特性

  • 支持多种源端数据库:MySQL、MariaDB、MongoDB、PostgreSQL、Oracle、SQL Server、Db2、Cassandra、Vitess、Spanner、Informix 等;
  • 捕获完整数据变更,且只捕获已提交的事务,避免中间状态与回滚操作,保证数据一致性;
  • 通过读取数据库事务日志而非轮询表,保证高性能和低侵入性,不影响源库性能。MySQL、PostgreSQL 场景下延迟可达毫秒级;
  • 无需修改数据模型(如增加 Last Updated 字段);
  • 支持数据删除操作的捕获;
  • 基于 Java 开发,资源占用低,支持分布式部署和高可用;通过 Kafka Connect 框架横向扩展,应对大数据量同步;
  • 支持库、表、字段级别的过滤,可配置包含列表或排除列表;
  • 支持指定字段的数据脱敏,保护敏感信息;
  • 支持消息转换,包括路由、筛选、扁平化等;
  • 大多数连接器可通过 JMX 监控。

下载安装

官方推荐使用 Docker 部署,并给出了详细安装步骤与示例:

复制全文 生成海报 Debezium CDC Kafka Connect 数据同步

推荐文章

程序员茄子在线接单