Debezium 架构

最常见的部署方式是利用 Apache Kafka Connect。Kafka Connect 是一个用于实现和运行以下组件的框架和运行时:

  • 将记录发送到 Kafka 的 Source 连接器,例如 Debezium

  • 将记录从 Kafka 主题传播到其他系统的 Sink 连接器

下图展示了一个基于 Debezium 的变更数据捕获管道的架构。

Debezium Architecture

如图所示,Debezium 的 MySQL 和 PostgresSQL 连接器被部署用来捕获这两个数据库类型的变更。每个 Debezium 连接器都会与其源数据库建立连接。

  • MySQL 连接器使用客户端库来访问 binlog

  • PostgreSQL 连接器从逻辑复制流中读取数据。

Kafka Connect 作为独立于 Kafka Broker 的服务运行。

默认情况下,来自一个数据库表的数据变更会被写入一个与表名相对应的 Kafka 主题。如有需要,您可以通过配置 Debezium 的 主题路由转换 来调整目标主题名称。例如,您可以:

  • 将记录路由到一个名称与表名不同的主题。

  • 将多个表的变更事件记录流式传输到同一个主题。

在变更事件记录进入 Apache Kafka 后,Kafka Connect 生态系统中的不同连接器可以将这些记录流式传输到其他系统和数据库,如 Elasticsearch、数据仓库和分析系统,或 Infinispan 等缓存。根据所选的 Sink 连接器,您可能需要配置 Debezium 的 新记录状态提取 转换。这个 Kafka Connect SMT 将 Debezium 变更事件中的 after 结构传递给 Sink 连接器。修改后的变更事件记录将替换默认传播的、更冗长的原始记录。

Debezium 服务器

另一种部署 Debezium 的方式是使用 Debezium 服务器。Debezium 服务器是一个可配置的、即用型应用程序,用于将变更事件从源数据库流式传输到各种消息传递基础设施。下图展示了一个使用 Debezium 服务器的变更数据捕获管道的架构。

Debezium Architecture

您可以配置 Debezium 服务器使用一个 Debezium 源连接器来捕获源数据库的变更。变更事件可以序列化成不同的格式,如 JSON 或 Apache Avro,然后发送到各种消息传递基础设施,如 Amazon Kinesis、Google Cloud Pub/Sub 或 Apache Pulsar。

Debezium 引擎

使用 Debezium 连接器的另一个替代方法是使用 Debezium 引擎。在这种情况下,Debezium 不会通过 Kafka Connect 运行,而是作为一个库嵌入到您的自定义 Java 应用程序中。这对于在应用程序本身内部消费变更事件(无需部署完整的 Kafka 和 Kafka Connect 集群)或者将变更流式传输到 Amazon Kinesis 等替代消息代理非常有用。您可以在示例仓库中找到后者的 示例