11.4. 将信号发送到 Debezium 连接器


Debezium 信号机制提供了一种修改连接器行为或触发一次性操作的方法,如启动表 的临时快照。要触发连接器来执行指定操作,您需要发出 SQL 命令来向专用信号表添加信号消息,也称为信号数据收集。您在源数据库中创建的信号表专门用于与 Debezium 通信。当 Debezium 检测到新的 日志记录 或临时快照记录添加到 信号表中时,它会读取信号,并启动请求的操作。

信号可用于以下 Debezium 连接器:

  • Db2
  • MongoDB (技术预览)
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server

11.4.1. 启用 Debezium 信号

默认情况下禁用 Debezium 信号机制。您必须明确为要使用的每个连接器启用信号。

流程

  1. 在源数据库中,创建一个信号数据收集表,用于将信号发送到连接器。有关信号数据收集所需的结构的详情,请参考 信号数据收集的结构
  2. 对于实现原生更改数据捕获(CDC)机制的源数据库,请为信号表启用 CDC。
  3. 将信号数据收集的名称添加到 Debezium 连接器配置中。
    在连接器配置中,添加属性 signal.data.collection,并将其值设为在第 1 步中创建的信号数据收集的完全限定名称。

    For example, signal.data.collection = inventory.debezium_signals.

    信号集合的完全限定名称格式取决于连接器。
    以下示例显示了要用于每个连接器的命名格式:

    Db2
    <schemaName>.<tableName>
    MongoDB
    <databaseName>.<collectionName>
    MySQL
    <databaseName>.<tableName>
    Oracle
    <databaseName>.<schemaName>.<tableName>
    PostgreSQL
    <schemaName>.<tableName>
    SQL Server
    <databaseName &gt; . &lt;schemaName> . <tableName >

    以了解有关设置 signal.data.collection 属性的更多信息,请参阅连接器的配置属性表。

11.4.1.1. Debezium 信号数据收集所需的结构

信号数据收集或信号表存储您发送到连接器的信号来触发指定操作。信号表的结构必须符合以下标准格式:

  • 包含三个字段(列)。
  • 字段按特定顺序排列,如 表 1 所示。
表 11.4. 信号数据收集所需的结构
字段类型描述

id
(必需)

字符串

标识信号实例的任意唯一字符串。
您可以为提交给信号表的每个信号分配一个 id
通常 ID 是 UUID 字符串。
您可以使用信号实例进行日志记录、调试或去除重复数据。
当信号触发 Debezium 执行增量快照时,它会生成一个带有任意 id 字符串的信号消息。生成的消息包含的 id 字符串与提交的信号中的 id 字符串无关。

类型
(必需)

字符串

指定要发送的信号类型。
您可以将某些信号类型用于任何可用的信号类型,而其他信号类型则仅适用于特定的连接器。

数据
(可选)

字符串

指定要传递给信号操作的 JSON 格式参数。
每个信号类型都需要一组特定的数据。

注意

数据收集中的字段名称是任意的。上表提供了推荐的名称。如果您使用不同的命名约定,请确保每个字段中的值与预期内容一致。

11.4.1.2. 创建 Debezium 信号数据收集

您可以通过将标准 SQL DDL 查询提交到源数据库来创建信号表。

先决条件

  • 您有足够的访问权限在目标数据库上创建表。

流程

  • 向源数据库提交 SQL 查询,以创建 与所需结构 一致的表,如下例所示:

    CREATE TABLE < tableName> (id VARCHAR (<varcharValue&gt;) PRIMARY KEY, type VARCHAR (<varcharValue>) NOT NULL, data VARCHAR (<varcharValue&gt;) NULL);
注意

您分配给 id 变量的 VARCHAR 参数的空间量必须足够,以适应发送到信号表的信号的 ID 字符串的大小。
如果 ID 的大小超过可用空间,则连接器无法处理信号。

以下示例显示了一个 CREATE TABLE 命令,它创建一个三列 debezium_signal 表:

CREATE TABLE debezium_signal (id VARCHAR(42) PRIMARY KEY, type VARCHAR(32) NOT NULL, data VARCHAR(2048) NULL);

11.4.2. Debezium 信号操作的类型

您可以使用信号启动以下操作:

有些信号与所有连接器不兼容。

11.4.2.1. 日志记录信号

您可以通过创建一个具有 日志 信号类型的信号表条目,来请求连接器在日志中添加条目。处理信号后,连接器会将指定的消息输出到日志中。(可选)您可以配置信号,以便生成的消息包含流协调。

表 11.5. 添加日志消息的信号记录示例
描述

id

924e3ff8-2245-43ca-ba77-2af9af02fa07

 

type

log

信号的操作类型。

data

{"message": "Signal message at offset {}"}

message 参数指定要打印到日志的字符串。
如果您在消息中添加占位符({}),它将替换为流协调。

11.4.2.2. 临时快照信号

您可以通过创建一个带有 execute-snapshot 信号类型的信号表条目来请求连接器启动临时快照。处理信号后,连接器将运行请求的快照操作。

与连接器首次启动后运行的初始快照不同,在连接器已开始流更改事件后,会在运行时运行临时快照。您可以随时启动临时快照。

临时快照可用于以下 Debezium 连接器:

  • Db2
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server
表 11.6. 临时快照信号记录示例

id

d139b9b7-7777-4547-917d-e1775ea61d41

type

execute-snapshot

data

{"data-collections": ["public.MyFirstTable", "public.MySecondTable"]}

目前,exec -snapshot 操作只触发 增量快照

有关临时快照的更多信息,请参阅您的连接器文档中的 快照 主题。

临时快照停止信号

您可以通过创建带有 stop-snapshot 信号类型的信号表条目,请求连接器来停止 in-progress 临时快照。处理信号后,连接器将停止当前的 in-progress 快照操作。

您可以停止以下 Debezium 连接器的临时快照:

  • Db2
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server
表 11.7. 停止临时快照信号记录的示例

id

d139b9b7-7777-4547-917d-e1775ea61d41

type

stop-snapshot

data

{"type":"INCREMENTAL", "data-collections": ["public.MyFirstTable"]}

您必须指定信号 的类型data-collections 字段是可选的。将 data-collections 字段留空,以请求连接器停止当前快照中的所有活动。如果您希望增量快照继续,但您要从快照中排除特定集合,请提供以逗号分隔的集合或正则表达式列表。连接器处理信号后,增量快照将继续,但它会把数据从您指定的集合中排除。

11.4.2.3. 增量快照

增量快照是特定类型的临时快照。在增量快照中,连接器捕获您指定的表的基准状态,类似于初始快照。但是,与初始快照不同,增量快照会以块的形式捕获表,而不是一次捕获所有快照。连接器使用水位线方法来跟踪快照的进度。

通过在块而不是单个单一操作中捕获指定表的初始状态,增量快照比初始快照过程提供以下优点:

  • 虽然连接器捕获指定表的基准状态,但事务日志中最近实时事件的流传输将继续中断。
  • 如果增量快照进程中断,可以从其停止的点中恢复。
  • 您可以随时启动增量快照。

增量快照暂停信号

您可以通过创建一个具有 pause-snapshot 信号类型的信号表条目,请求连接器暂停 in-progress 增量快照。处理信号后,连接器将停止暂停当前的 in-progress 快照操作。因此,无法指定数据收集,因为快照处理将在信号处理时暂停的位置。

您可以为以下 Debezium 连接器暂停增量快照:

  • Db2
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server
表 11.8. 暂停增量快照信号记录的示例

id

d139b9b7-7777-4547-917d-e1775ea61d41

type

pause-snapshot

您必须指定信号 的类型data 字段将被忽略。

增量快照恢复信号

您可以通过创建一个具有 resume-snapshot 信号类型的信号表条目来请求连接器恢复暂停的增量快照。处理信号后,连接器将恢复之前暂停的快照操作。

您可以为以下 Debezium 连接器恢复增量快照:

  • Db2
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server
表 11.9. 恢复增量快照信号记录的示例

id

d139b9b7-7777-4547-917d-e1775ea61d41

type

resume-snapshot

您必须指定信号 的类型data 字段将被忽略。

有关增量快照的更多信息,请参阅您的连接器文档中的 快照 主题。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.