安装 Debezium

安装和使用 Debezium 连接器有多种方式,我们已经记录了几种最常见的方式。

安装 Debezium 连接器

如果您已经安装了 KafkaKafka Connect,那么使用 Debezium 的连接器之一将非常容易。只需下载一个或多个连接器插件归档(见下文),将其文件解压到您的 Kafka Connect 环境中,并将解压后的插件的父目录添加到 Kafka Connect 的插件路径中。如果还没有,请在您的 worker 配置文件(例如 connect-distributed.properties)中使用 plugin.path 配置属性指定插件路径。例如,假设您已下载 Debezium MySQL 连接器归档并将其内容解压到 /kafka/connect/debezium-connector-mysql。然后,您将在 worker 配置中指定以下内容:

plugin.path=/kafka/connect

重新启动您的 Kafka Connect 进程以加载新的 JAR 文件。

连接器插件可从 Maven 获取

如果您对 Debezium Server 感兴趣,请在此处查看安装说明 here

如果不可变容器是您的偏好,那么可以查看 Debezium 的容器镜像,这些镜像包含了 Apache Kafka 和 Kafka Connect,并且已预装了不同的 Debezium 连接器,随时可用。我们的 教程 甚至会引导您使用这些镜像,这是一个了解 Debezium 是什么的好方法。

quay.io 获取的 Debezium 容器映像未经严格测试或安全分析,仅供测试和评估目的使用。这些映像不适用于生产环境。为降低生产部署中的风险,请仅部署由受信任供应商积极维护并经过彻底漏洞分析的容器。

当然,您也可以在 Kubernetes 和 OpenShift 上运行 Debezium。推荐使用 Strimzi Kubernetes Operator。它允许通过自定义 Kubernetes 资源以声明式的方式部署 Apache Kafka、Kafka Connect,甚至连接器。

默认情况下,Debezium 用于 Kafka Connect 的 Docker 镜像使用 /kafka/connect 目录作为插件目录。因此,您可能希望使用的任何其他连接器都应添加到该目录中。或者,您可以在启动容器时通过指定 KAFKA_CONNECT_PLUGINS_DIR 环境变量来将其他目录添加到插件路径(例如 -e KAFKA_CONNECT_PLUGINS_DIR=/kafka/connect/,/path/to/further/plugins)。使用 Confluent 提供的 Kafka Connect 容器镜像时,可以通过指定 CONNECT_PLUGIN_PATH 环境变量来实现相同的功能。

请注意,运行 Debezium 连接器或 Debezium UI 需要 Java 17 或更高版本。

使用快照版本

Debezium 会执行 nightly 构建并部署到 Sonatype 快照仓库。如果您想尝试最新的版本或验证您感兴趣的 bug 修复,请使用 oss.sonatype.org 中的插件,或查看此文档的 nightly 版本以获取指向每个连接器插件工件的直接链接。安装过程与常规版本相同。

使用 Debezium 连接器

要使用连接器为特定的源服务器/集群生成更改事件,只需为 MariaDB ConnectorMySQL ConnectorPostgres ConnectorMongoDB ConnectorSQL Server ConnectorOracle ConnectorDb2 ConnectorCassandra ConnectorVitess ConnectorSpanner ConnectorJDBC sink ConnectorInformix Connector 创建一个配置文件,并使用 Kafka Connect REST API 将该连接器配置添加到您的 Kafka Connect 集群。当连接器启动时,它将连接到源并为每个插入、更新和删除的行或文档生成事件。

有关更多信息,请参阅 Debezium 连接器文档。

配置 Debezium 主题

Debezium 使用(通过 Kafka Connect 或直接)多个主题来存储数据。这些主题必须由管理员创建,或者由 Kafka 本身通过启用主题的自动创建来创建。主题有一些限制和建议。

  • 数据库模式历史主题(适用于 MySQL 和 SQL Server 的 Debezium 连接器)

    • 无限(或非常长)的保留期(不要压缩!)

    • 生产环境的复制因子至少为 3

    • 单个分区

  • 其他主题

    • 可选地,启用 日志压缩(如果您只想保留给定记录的最后一个更改事件);在这种情况下,应在 Apache Kafka 中配置 min.compaction.lag.msdelete.retention.ms 主题级设置,以便消费者有足够的时间接收所有事件和删除标记;具体来说,这些值应大于您预计的 sink 连接器的最大停机时间,例如在更新它们时。

    • 生产环境中已复制

    • 单个分区

      • 您可以放宽单个分区规则,但您的应用程序必须处理不同数据库行之间的乱序事件(单个行的事件仍然是完全排序的)。如果使用多个分区,Kafka 默认会通过哈希键来确定分区。其他分区策略需要使用 SMT 来为每个记录设置分区号。

    • 有关可自定义的主题自动创建(自 Kafka Connect 2.6.0 起可用),请参阅 自定义主题自动创建

使用 Debezium 库

尽管 Debezium 旨在用作即插即用服务,但所有 JAR 文件和其他工件都可以在 Maven Central 中找到。

我们提供了一个小型库,以便应用程序可以 嵌入任何 Kafka Connect 连接器 并直接从源系统读取数据更改事件。这提供了一个轻量级的系统(因为不需要 Kafka 和 Kafka Connect 服务),但作为结果,它的容错性和可靠性不如正常运行的 Kafka 集群,因为应用程序必须管理和维护 Kafka 分布式和复制日志中通常保存的所有状态。它非常适合在测试中使用,并且通过仔细考虑,它可能在某些应用程序中有用。