开云体育官方注册网址用于Db2的Debezium连接器

开云体育官方注册网址Debezium的Db2连接器可以捕获Db2数据库表中的行级更改。开云体育电动老虎机有关与此连接器兼容的Db2数据库版本的信息,请参见开云体育电动老虎机开云体育官方注册网址Debezium发布概述

该连接器受到SQL Server的Debezium实现的强烈启发,该实现使用基于SQL开云体育官方注册网址的轮询模型,将表置于“捕获模式”。当表处于捕获模式时,Debezium Db2连接器将为该表的每个行级更新生开云体育官方注册网址成一个更改事件并将其流式传输。

处于捕获模式的表有一个关联的变更数据表,由Db2创建。对于处于捕获模式的表的每次更改,Db2将关于该更改的数据添加到表的关联更改数据表中。更改数据表包含针对行的每个状态的条目。它还有用于删除的特殊条目。Debe开云体育官方注册网址zium Db2连接器从更改数据表读取更改事件,并将事件发送到Kafka主题。

当Debezium Db2连接器第开云体育官方注册网址一次连接到Db2数据库时,连接器将读取表的一致快照,连接器已为其配置以捕获更改。开云体育电动老虎机默认情况下,这是所有非系统表。连接器配置属性允许您指定将哪些表放入捕获模式,或将哪些表排除在捕获模式之外。

当快照完成时,连接器开始向处于捕获模式的表发出已提交更新的更改事件。默认情况下,特定表的更改事件会转到与表同名的Kafka主题。应用程序和服务使用来自这些主题的更改事件。

连接器需要使用抽象语法符号(ASN)库,这些库作为Db2 for Linux的标准部分提供。要使用ASN库,您必须拥有IBM InfoSphere Data Replication (IIDR)许可证。您不必安装IIDR来使用ASN库。

Db2连接器已经使用Db2 for Linux进行了测试。预计连接器也可以在Windows等其他平台上工作,如果您能确认这一点,我们希望得到您的反馈。

概述

Debe开云体育官方注册网址zium Db2连接器基于ASN捕获/应用代理在Db2中启用SQL Replication。捕获代理:

  • 为处于捕获模式的表生成更改数据表。

  • 以捕获模式监视表,并将更改事件存储在相应的更改数据表中,以便对这些表进行更新。

Debe开云体育官方注册网址zium连接器使用SQL接口查询更改数据表以获取更改事件。

数据库管开云体育电动老虎机理员必须将希望捕获更改的表放入捕获模式。为了方便和自动化测试,有开云体育官方注册网址Debezium用户定义函数(udf)你可以编译它,然后用它来执行以下管理任务:

  • 启动、停止和重新初始化ASN代理

  • 将表放入捕获模式

  • 创建复制(ASN)模式和更改数据表

  • 从捕获模式中删除表

或者,您也可以使用Db2控制命令来完成这些任务。

在感兴趣的表处于捕获模式后,连接器将读取它们对应的更改数据表,以获取表更新所需的更改事件。连接器为每个行级的插入、更新和删除操作发出一个更改事件,该Kafka主题与被更改的表具有相同的名称。这是您可以修改的默认行为。客户端应用程序读取与感兴趣的数据库表对应的Kafka主题,并可以对每个行级更改事件做出反应。开云体育电动老虎机

通常,数据库管理员在表生命周期开云体育电动老虎机的中间阶段将表置于捕获模式。这意味着连接器没有对表所做的所有更改的完整历史。因此,当Db2连接器第一次连接到特定的Db2数据库时,它首先执行开云体育电动老虎机一致的快照每个处于捕获模式的表。在连接器完成快照之后,连接器流将从创建快照的点更改事件。通过这种方式,连接器从处于捕获模式的表的一致视图开始,并且不会删除在执行快照时所做的任何更改。

开云体育官方注册网址Debezium连接器可以容忍故障。当连接器读取并产生更改事件时,它会记录更改数据表项的日志序列号(LSN)。LSN是更改事件在数据库日志中的位置。开云体育电动老虎机如果连接器由于任何原因停止,包括通信故障、网络问题或崩溃,重新启动时它将继续读取它停止的更改数据表。这包括快照。也就是说,如果在连接器停止时快照还没有完成,那么重新启动时连接器将开始一个新的快照。

连接器如何工作

要优化配置和运行Debezium Db2连接器,了解连接器如何执行开云体育官方注册网址快照、流更改事件、确定Kafka主题名称以及处理模式更改是很有帮助的。

快照

Db2的复制特性并不是为存储数据库更改的完整历史而设计的。开云体育电动老虎机因此,当Debezium Db2连接器第一开云体育官方注册网址次连接到数据库时,它会对处于捕获模式的表进行一致的快照开云体育电动老虎机,并将此状态传输给Kafka。这为表内容建立了基线。

默认情况下,当Db2连接器执行快照时,它会执行以下操作:

  1. 确定哪些表处于捕获模式,因此必须包含在快照中。默认情况下,所有非系统表都处于捕获模式。连接器配置属性,例如table.exclude.list而且table.include.list允许您指定哪些表应该处于捕获模式。

  2. 以捕获模式获取每个表上的锁。这确保在快照期间,这些表中不会发生模式更改。锁的级别由snapshot.isolation.mode连接器配置属性。

  3. 读取服务器事务日志中最高的(最近的)LSN位置。

  4. 捕获处于捕获模式的所有表的模式。连接器将此信息保存在其内部数据库模式历史主题中。开云体育电动老虎机

  5. 可选,释放在步骤2中获得的锁。通常,这些锁只持有很短的时间。

  6. 在第3步读取的LSN位置,连接器扫描捕获模式表及其模式。扫描时,连接器:

    1. 确认表是在快照开始之前创建的。如果不是,快照将跳过该表。快照完成后,连接器开始发出更改事件,连接器将为快照期间创建的任何表生成更改事件。

    2. 产生一个事件,用于捕获模式下的每个表中的每一行。所有事件中包含相同的LSN位置,即步骤3中获取的LSN位置。

    3. 发出每个事件到与表同名的Kafka主题。

  7. 在连接器偏移量中记录快照的成功完成。

Ad hoc快照

默认情况下,连接器仅在第一次启动后运行初始快照操作。在初始快照之后,在正常情况下,连接器不会重复快照过程。连接器捕获的任何未来更改事件数据都只通过流处理传入。

但是,在某些情况下,连接器在初始快照期间获得的数据可能会过时、丢失或不完整。为了提供一种重新捕获表数据的机制,Debezium包含了一个执行临时快照的选项。开云体育官方注册网址数据库中的以下更改可能会导致执行临时快照:开云体育电动老虎机

  • 连接器配置被修改以捕获一组不同的表。

  • Kafka主题被删除,必须重新构建。

  • 数据损坏是由于配置错误或其他问题造成的。

您可以对先前捕获快照的表重新运行快照,方法是启动所谓的特别的快照.临时快照需要使用信号表.通过向Debezium信令表发送信号请求,可以启动一个临时快照。开云体育官方注册网址

当您初始化现有表的临时快照时,连接器将内容追加到已存在的表主题。如果先前存在的主题被删除,Debezium可以自动创建一个主题开云体育官方注册网址自动创建主题启用。

临时快照信号指定要包含在快照中的表。快照可以捕获数据库的全部内容,也可以仅捕获数据库中表的一个子集。开云体育电动老虎机此外,快照可以捕获数据库中表内容的一个子集。开云体育电动老虎机

指定要捕获的表execute-snapshot发送到信令表的消息。属性的类型execute-snapshot信号增量,并提供要包含在快照中的表的名称,如下表所示:

表1。ad hoc的例子execute-snapshot信号记录
默认的 价值

类型

增量

指定要运行的快照类型。
可选设置类型。目前,您只能请求增量快照。

数据收集

N/A

包含与要快照的表的完全限定名称匹配的正则表达式的数组。
名称的格式与signal.data.collection配置选项。

附加条件

N/A

一个可选字符串,它根据表的列指定一个条件,以捕获表内容的一个子集。

触发临时快照

属性添加项来初始化临时快照execute-snapshot发送到信令表的信号类型。连接器处理消息后,开始快照操作。快照进程读取第一个和最后一个主键值,并使用这些值作为每个表的起点和终点。根据表中条目的数量和配置的块大小,Debezium将表划分为块,然后依次对每个块进行快照,每次快照一个。开云体育官方注册网址

目前,execute-snapshot动作类型触发器增量快照只有。有关更多信息,请参见增量快照

增量快照

为了提供管理快照的灵活性,Debezium包含了一个补充的快照机制,称为开云体育官方注册网址增量快照.增量快照依赖于Debezium机制开云体育官方注册网址发送信号到Debezium连接器开云体育官方注册网址.增量快照基于DDD-3设计文档。

在增量快照中,Debezium不像在初始快照中那样一次性捕获数据库的全部状态,而是在一系列可配置的块中分阶段捕获每个表。开云体育官方注册网址开云体育电动老虎机可以指定希望快照捕获的表和每个块的大小.块大小决定了快照在数据库上的每次获取操作期间收集的行数。开云体育电动老虎机增量快照的默认chunk大小为1kb。

随着增量快照的进行,Debezium使用水印来跟踪进度,维护它捕获的每个表开云体育官方注册网址行的记录。与标准的初始快照过程相比,这种分阶段捕获数据的方法具有以下优点:

  • 您可以在流数据捕获的同时并行运行增量快照,而不是将流数据延迟到快照完成。在整个快照过程中,连接器继续从更改日志中捕获接近实时的事件,并且两个操作都不会阻塞另一个操作。

  • 当增量快照进程中断时,可以恢复增量快照,不会丢失数据。进程恢复后,快照将从它停止的位置开始,而不是从开始重新捕获表。

  • 您可以在任何时候按需运行增量快照,并根据需要重复该过程以适应数据库更新。开云体育电动老虎机例如,在修改连接器配置以向其添加表之后,可以重新运行快照table.include.list财产。

增量快照流程

运行增量快照时,Debezium根据主键对每个表进行排序,然后根据主键将表分开云体育官方注册网址成块配置的块大小.它逐个块工作,然后捕获块中的每个表行。对于它捕获的每一行,快照都会发出一个事件。该事件表示块快照开始时行的值。

随着快照的进行,其他进程可能会继续访问数据库,可能会修改表记录。开云体育电动老虎机为了反映这些变化,插入更新,或删除操作像往常一样提交到事务日志中。类似地,正在进行的Debezium流处理继续检开云体育官方注册网址测这些更改事件,并向Kafka发出相应的更改事件记录。

Debe开云体育官方注册网址zium如何解决具有相同主键的记录之间的冲突

在某些情况下,更新删除流流程发出的事件按顺序接收。也就是说,流处理过程可能在快照捕获包含表行的块之前发出修改表行的事件事件。当快照最终发出相应的事件时,其值已被取代。为了确保按正确的逻辑顺序处理不按顺序到达的增量快照事件,Debezium采用了一种缓冲方案来解决冲突。开云体育官方注册网址只有在快照事件和流事件之间的冲突被解决之后,Debezium才会向Kafka发送事件记录。开云体育官方注册网址

快照窗口

协助解决晚到车辆之间的碰撞事件和流事件修改同一表行,Debezium采用了所谓的开云体育官方注册网址快照窗口.快照窗口定义了增量快照为指定表块捕获数据的时间间隔。在块的快照窗口打开之前,Debezium遵循其通常的行为,从事务日志中直接向下游的目标Kaf开云体育官方注册网址ka主题发送事件。但是从特定块的快照打开的那一刻起,直到它关闭,Debezium执行重复数据删除步骤来解决具有相同主键的事件之间的冲突。开云体育官方注册网址

对于每个数据收集,Debezium会发出两种类型的事件,并将开云体育官方注册网址它们的记录存储在一个目的地Kafka主题中。它直接从表捕获的快照记录发出为操作。同时,随着用户继续更新数据收集中的记录,事务日志被更新以反映每次提交,Debezium就会发出开云体育官方注册网址更新删除每个更改的操作。

当快照窗口打开时,Debezium开始处理快照块,它将快照记录传递到开云体育官方注册网址内存缓冲区。的主键在快照窗口期间缓冲区中的事件与传入流事件的主键进行比较。如果没有匹配到,流事件记录将直接发送到Kafka。如果D开云体育官方注册网址ebezium检测到匹配,它将丢弃缓冲事件,并将流记录写入目标主题,因为流事件在逻辑上取代静态快照事件。块的快照窗口关闭后,缓冲区仅包含不存在相关事务日志事件的事件。开云体育官方注册网址Debezium释放这些剩余的事件到表的Kafka主题。

连接器对每个快照块重复该过程。

Db2的开云体育官方注册网址Debezium连接器在运行增量快照时不支持模式更改。

触发增量快照

目前,创建增量快照的唯一方式是发送自组织快照信号到源数据库上的信令表。开云体育电动老虎机将一个信号作为SQL提交给信令表插入查询。

在Debez开云体育官方注册网址ium检测到信号表中的变化后,它读取信号,并运行所请求的快照操作。

提交的查询指定要包含在快照中的表,还可以指定快照操作的类型。目前,快照操作的唯一有效选项是默认值,增量

若要指定要包含在快照中的表,请提供数据收集列出表的数组或用于匹配表的正则表达式数组,例如
{“数据收集”:["。MyFirstTable”、“公众。MySecondTable ")}

数据收集增量快照信号阵列没有默认值。如果数据收集数组为空时,Debezium检测开云体育官方注册网址到不需要任何操作,因此不执行快照。

如果要包含在快照中的表的名称包含点()中的数据库、模式或表的名称,以将表添加到开云体育电动老虎机数据收集数组时,必须用双引号转义名称的每个部分。

类中存在的表公共Schema,它有名字我的。表格,请使用以下格式:“公共”。“My.Table”

先决条件
过程
  1. 发送一个SQL查询,将临时增量快照请求添加到信令表:

    插入< signalTable >(id, type, data)' < id > '' < snapshotType >”, '{"data-collections": ["<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

    例如,

    INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data)(1)值(“ad-hoc-1”,(2)“execute-snapshot”,(3)”{代码基于schema1中“数据收集”:["。表1”、“schema2.table2”),(4)“类型”:“增量”},(5)“附加条件”:“颜色=蓝色“}”);(6)

    的值id类型,数据命令中的参数对应信令表字段

    样例中参数说明如下:

    表2。向信令表发送增量快照信号的SQL命令字段说明
    价值 描述

    1

    myschema.开云体育官方注册网址debezium_signal

    指定源数据库上信令表的全限定名。开云体育电动老虎机

    2

    ad-hoc-1

    id参数指定分配为id信号请求的标识符。
    使用此字符串标识信令表中条目的日志消息。开云体育官方注册网址Debezium不使用这个字符串。相反,在快照期间,Debezium生成自己的快照开云体育官方注册网址id字符串作为水印信号。

    3.

    execute-snapshot

    指定类型参数指定信号要触发的操作。

    4

    数据收集

    的必需组件数据信号的字段,该字段指定表名或正则表达式的数组,以匹配要包含在快照中的表名。
    对象中指定连接器的信令表的名称时使用的格式相同,该数组列出了根据表的全限定名匹配表的正则表达式signal.data.collection配置属性。

    5

    增量

    一个可选的类型组成部分数据信号的字段,指定要运行的快照操作的类型。
    目前,唯一有效的选项是默认值,增量
    如果不指定值,连接器将运行增量快照。

    6

    附加条件

    一个可选字符串,它根据表的列指定一个条件,以捕获表内容的子集。有关的更多信息附加条件参数,看到的临时增量快照附加条件

的临时增量快照附加条件

如果希望快照仅包含表中内容的子集,则可以通过添加附加条件参数表示快照信号。

典型快照的SQL查询形式如下:

Select * from<表>....

通过添加附加条件参数,则追加一个在哪里输入SQL查询的条件,示例如下:

Select * from<表>在哪里<附加条件>....

下面的示例显示了一个SQL查询,该查询向信令表发送一个附加条件的临时增量快照请求:

插入< signalTable >(id, type, data)' < id > '' < snapshotType >”, '{"data-collections": ["<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

例如,假设你有一个产品表,包含以下列:

  • id(主键)

  • 颜色

  • 数量

的增量快照产品表中仅包含其中的数据项颜色=蓝色,可以使用下面的SQL语句触发快照:

INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema1. data ", ' "data-collections": ["schema1. data ")产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色"});

附加条件参数还允许您传递基于多个列的条件。例如,使用产品表中,您可以提交一个查询,该查询将触发一个增量快照,该快照仅包含那些项目的数据颜色=蓝色而且量> 10

INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema1. data ", ' "data-collections": ["schema1. data ")product "],"type":"incremental", "additional-condition":"color=blue AND quantity>10"}');

下面的示例显示了连接器捕获的增量快照事件的JSON。

[示例]增量快照事件消息
{“前”:零,“后”:{“pk”:“1”,“价值”:“新数据”},“源”:{…“快照”:“增量”(1)},“人事处”:“r”,(2)"ts_ms":"1620393591654", "transaction":null}
字段名 描述

1

快照

指定要运行的快照操作的类型。
目前,唯一有效的选项是默认值,增量
指定一个类型您提交给信令表的SQL查询中的值是可选的。
如果不指定值,连接器将运行增量快照。

2

人事处

事件类型。
快照事件的值为r,表示操作。

停止增量快照

您还可以通过向源数据库上的表发送信号来停止增量快照。开云体育电动老虎机通过发送SQL向表提交停止快照信号插入查询在Debez开云体育官方注册网址ium检测到信号表中的变化后,它将读取信号,如果增量快照操作正在进行,则停止增量快照操作。

提交的查询指定的快照操作增量,以及要删除的当前运行快照的表(可选)。

先决条件
过程
  1. 向信令表发送一个SQL查询来停止临时增量快照:

    插入< signalTable >(id, type, data)' < id > ', 'stop-snapshot', '{"data-collections": ["<表>”、“<表>”,“类型”:“增量”}’);

    例如,

    INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data)(1)值(“ad-hoc-1”,(2)“stop-snapshot”,(3)”{代码基于schema1中“数据收集”:["。表1”、“schema2.table2”),(4)“类型”:“增量”}’);(5)

    的值id类型,数据signal命令中的参数对应信令表字段

    样例中参数说明如下:

    表3。向信令表发送停止增量快照信号的SQL命令字段说明
    价值 描述

    1

    myschema.开云体育官方注册网址debezium_signal

    指定源数据库上信令表的全限定名。开云体育电动老虎机

    2

    ad-hoc-1

    id参数指定分配为id信号请求的标识符。
    使用此字符串标识信令表中条目的日志消息。开云体育官方注册网址Debezium不使用这个字符串。

    3.

    stop-snapshot

    指定类型参数指定信号要触发的操作。

    4

    数据收集

    的可选组件数据信号的字段,该字段指定表名或正则表达式数组,以匹配要从快照中删除的表名。
    对象中指定连接器的信令表的名称时使用的格式相同,该数组列出了根据表的全限定名匹配表的正则表达式signal.data.collection配置属性。如果这个分量数据字段,则信号停止正在进行的整个增量快照。

    5

    增量

    的必需组件数据信号的字段,该字段指定要停止的快照操作的类型。
    目前,唯一有效的选项是增量
    如果没有指定类型值时,信号停止增量快照失败。

更改数据表

在完成快照之后,当Debezium Db2连接器第一次启动时,连接器开云体育官方注册网址为处于捕获模式的每个源表标识更改数据表。连接器对每个更改数据表执行以下操作:

  1. 读取更改在最后存储的最高LSN和当前最高LSN之间创建的事件。

  2. 根据每个事件的提交LSN和更改LSN对更改事件进行排序。这确保连接器按照发生表更改的顺序发出更改事件。

  3. 将提交和更改LSNs作为偏移量传递给Kafka Connect。

  4. 存储连接器传递给Kafka Connect的最高LSN。

重新启动后,连接器将从中断的偏移量(提交和更改lns)重新发出更改事件。当连接器运行并发出更改事件时,如果从捕获模式中删除表或将表添加到捕获模式,连接器将检测到更改,并相应地修改其行为。

主题名称

默认情况下,Db2连接器为所有的插入更新,删除对特定于该表的单个Apache Kafka主题的表中发生的操作。连接器使用以下约定来命名更改事件主题:

topicPrefixschemaName的表

下面的列表提供了默认名称组件的定义:

topicPrefix

属性指定的主题前缀topic.prefix连接器配置属性。

schemaName

发生操作的模式的名称。

的表

发生操作的表的名称。

例如,考虑使用my开云体育电动老虎机database开云体育电动老虎机数据库,其中包含四个表:产品PRODUCTS_ON_HAND客户,订单都在MYSCHEMA模式。连接器将向以下四个Kafka主题发射事件:

  • my开云体育电动老虎机database.MYSCHEMA.PRODUCTS

  • my开云体育电动老虎机database.MYSCHEMA.PRODUCTS_ON_HAND

  • my开云体育电动老虎机database.MYSCHEMA.CUSTOMERS

  • my开云体育电动老虎机database.MYSCHEMA.ORDERS

连接器应用类似的命名约定来标记其内部数据库模式历史主题,开云体育电动老虎机架构更改主题,事务元数据主题

如果默认的主题名称不满足您的需求,您可以配置自定义的主题名称。要配置自定义主题名称,需要在逻辑主题路由SMT中指定正则表达式。有关使用逻辑主题路由SMT自定义主题命名的详细信息,请参见主题的路由

架构更改主题

您可以配置Debezium Db2连接器开云体育官方注册网址,以生成描述应用于数据库中捕获的表的模式更改的模式更改事件。开云体育电动老虎机

开云体育官方注册网址Debezium在以下情况下向模式更改主题发出一条消息:

连接器将模式更改事件写入具有名称的Kafka模式更改主题< topicPrefix >在哪里< topicPrefix >中指定的主题前缀是否为topic.prefix连接器配置属性。连接器发送到模式更改主题的消息包含一个有效负载,其中包含以下元素:

开云体育电动老虎机数据库名

语句应用到的数据库的名称。开云体育电动老虎机的价值开云体育电动老虎机数据库名作为消息键。

pos

语句在binlog中的出现位置。

tableChanges

模式更改后的整个表模式的结构化表示。的tableChanges字段包含一个数组,其中包含表中每列的条目。由于结构化表示以JSON或Avro格式表示数据,消费者可以轻松读取消息,而无需首先通过DDL解析器处理它们。

对于处于捕获模式的表,连接器不仅将模式更改的历史存储在模式更改主题中,还存储在内部数据库模式历史主题中。开云体育电动老虎机内部数据库模式历史记录主题开云体育电动老虎机仅供连接器使用,不打算由消费应用程序直接使用。确保需要模式更改通知的应用程序只使用来自模式更改主题的信息。

不要对数据库模式历史主题进行分区。开云体育电动老虎机为了使数据库模式开云体育电动老虎机历史主题正确地工作,它必须维护连接器发出给它的事件记录的一致的全局顺序。

为了确保topic不被分区分割,可以通过以下方法设置topic的分区数:

  • 如果手动创建数据库模式历史记录主题,开云体育电动老虎机请指定的分区计数1

  • 如果使用Apache Kafka代理自动创建数据库模式历史主题,则该主题创建时,设置的值开云体育电动老虎机卡夫卡num.partitions配置选项1

连接器向其模式更改主题发出的消息格式处于酝酿状态,可以在不通知的情况下更改。

示例:发送到Db2连接器模式更改主题的消息

下面的示例显示模式更改主题中的消息。该消息包含表模式的逻辑表示。

{"schema":{…}, "payload": {"source": {"version": "2.1.2. "Final", "connector": "db2", "name": "db2", "ts_ms": 0, "snapshot": "true", "db": "testdb", "schema": "DB2INST1", "table": "CUSTOMERS", "change_lsn": null, "commit_lsn": "00000025:00000d98:00a2", "event_serial_no": null}, "ts_ms": 1588252618953,(1)“开云体育电动老虎机数据库名”:“TESTDB”,(2)“schemaName”:“DB2INST1”,“ddl”:null,(3)“tableChanges”:((4){"type": "CREATE",(5)" id ": " \ " DB2INST1 \ \”,\“客户”,(6)"表":{(7)"defaultCharsetName": null, "primaryKeyColumnNames": [(8)"ID"], "columns": [(9){"name": "ID", "jdbcType": 4, "nativeType": null, "typeName": "int身份","typeExpression": "int身份","charsetName": null, "length": 10, "scale": 0, "position": 1, "optional": false, "autoIncremented": false, "generated": false}, {"name": "FIRST_NAME", "jdbcType": 12, "nativeType": null, "typeName": "varchar", "typeExpression": "varchar", "charsetName": null, "length": 255, "scale": null, "position": 2, "optional": false, " autoincreted ": false, "generated": false}, {"name": "int身份","typeName": "varchar", "charsetName": null, "length": 255, "scale": null, "position": false}, {"name":"LAST_NAME", "jdbcType": 12, "nativeType": null, "typeName": "varchar", "typeExpression": "varchar", "charsetName": null, "length": 255, "scale": null, "position": 3, "optional": false, "autoIncremented": false, "generated": false}, {"name": "EMAIL", "jdbcType": 12, "nativeType": null, "typeName": "varchar", "typeExpression": "varchar", "charsetName": null, "length": 255, "scale": null, "position": 4, "optional": false, "autoIncremented": false, "generated": false}], "attributes": [(10){"customAttribute": "attributeValue"}]}}}}
表4。发送到模式更改主题的消息中的字段的描述
字段名 描述

1

ts_ms

可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。

在源对象中,ts_ms表示在数据库中进行更改的时间。开云体育电动老虎机通过比较payload.source的值。Ts_ms和payload的值。ts_ms,you can determine the lag between the source database update and Debezium.

2

开云体育电动老虎机数据库名
schemaName

标识包含更改的数据库和模式。开云体育电动老虎机

3.

ddl

总是用于Db2连接器。对于其他连接器,此字段包含负责模式更改的DDL。这个DDL对Db2连接器不可用。

4

tableChanges

包含DDL命令生成的模式更改的一个或多个项的数组。

5

类型

描述变化的类型。取值为:

  • 创建-表已创建

  • 改变-表格修改

  • 下降-删除表

6

id

创建、修改或删除的表的完整标识符。

7

表格

表示应用更改后的表元数据。

8

primaryKeyColumnNames

组成表主键的列列表。

9

已更改表中每列的元数据。

10

属性

每个表更改的自定义属性元数据。

在连接器发送到模式更改主题的消息中,消息键是包含模式更改的数据库的名称。开云体育电动老虎机在下面的示例中,使用有效载荷字段包含键:

{"schema": {"type": "struct", "fields": [{"type": "string", "optional": false, "field": "data开云体育电动老虎机baseName"}], "optional": false, "name": "io. debez开云体育官方注册网址um .connector.db2. schemachangekey "}, "payload": {"databaseName": "TESTDB"}}

事务的元数据

开云体育官方注册网址Debezium可以生成表示事务边界的事件,并丰富更改数据事件消息。

Debezium何时接收事务元开云体育官方注册网址数据的限制

开云体育官方注册网址Debezium仅为部署连接器后发生的事务注册和接收元数据。部署连接器之前发生的事务的元数据不可用。

开云体育官方注册网址类生成事务边界事件开始而且结束每个事务中的分隔符。事务边界事件包含以下字段:

状态

开始结束

id

唯一事务标识符的字符串表示形式。

ts_ms

事务边界事件的时间(开始结束事件)。如果数据源没有向Debezium提供事件时间,则该字段表示Debeziu开云体育官方注册网址m处理事件的时间。

event_count(结束事件)

事务发出的事件总数。

data_collections(结束事件)

对的数组data_collection而且event_count元素,该元素指示连接器为源自数据集合的更改发出的事件数。

例子
{"status": "BEGIN", "id": "00000025:00000d08:0025", "ts_ms": 1486500577125, "event_count": null, "data_collections": null} {"status": "END", "id": "00000025:00000d08:0025", "ts_ms": 1486500577691, "event_count": 2, "data_collections": [{"data_collection": "testDB.dbo. dbo. dbo. dbo. dbo. dbo。tablea", "event_count": 1}, {"data_collection": "testDB.dbo. data_collection"。Tableb ", "event_count": 1}]}

方法覆盖topic.transaction选项时,连接器将事务事件发出到< topic.prefix >.transaction的话题。

数据更改事件丰富

启用事务元数据时,连接器将丰富更改事件信封用一个新的事务字段。这个字段以复合字段的形式提供关于每个事件的信息:

id

唯一事务标识符的字符串表示形式。

total_order

事件在事务生成的所有事件中的绝对位置。

data_collection_order

事件在事务发出的所有事件中的每数据收集位置。

下面是一个消息的例子:

{“前”:零,“后”:{“pk”:“2”,“aa”:“1”},“源”:{…},“人事处”:“c”、“ts_ms”:“1580390884335”,“交易”:{" id ":“00000025:00000d08:0025”、“total_order”:“1”,“data_collection_order”:" 1 "}}

数据变更事件

Debe开云体育官方注册网址zium Db2连接器为每个行级生成一个数据更改事件插入更新,删除操作。每个事件包含一个键和一个值。键和值的结构取决于所更改的表。

开云体育官方注册网址Debezium和Kafka Connect就是围绕这个设计的连续的事件消息流.但是,这些事件的结构可能会随着时间的推移而改变,这对消费者来说可能很难处理。为了解决这个问题,每个事件都包含其内容的模式,或者,如果使用模式注册中心,则包含消费者可以用来从注册中心获取模式的模式ID。这使得每个事件都是自包含的。

下面的JSON骨架显示了变更事件的四个基本部分。然而,你如何配置你选择在你的应用程序中使用的Kafka Connect转换器,决定了这四个部分在变更事件中的表示。一个模式字段仅在配置转换器以产生该字段时才处于更改事件中。同样,事件键和事件有效负载只有在配置转换器以产生它时才位于更改事件中。如果你使用JSON转换器并配置它来生成所有四个基本的更改事件部分,则更改事件的结构如下:

{"schema": {(1)...}, "有效载荷":{(2)...}, "schema": {(3)...}, "有效载荷":{(4)...}},
表5所示。变更事件基本内容概述
字段名 描述

1

模式

第一个模式字段是事件键的一部分。它指定了一个Kafka Connect模式,用来描述事件键的内容有效载荷部分。换句话说,是第一个模式字段描述已更改表的主键的结构,如果表没有主键,则描述唯一键。

属性可以覆盖表的主键message.key.columns连接器配置属性.在本例中,第一个模式字段描述由该属性标识的键的结构。

2

有效载荷

第一个有效载荷字段是事件键的一部分。它具有前面所描述的结构模式字段,它包含已更改行的键。

3.

模式

第二个模式字段是事件值的一部分。它指定Kafka Connect模式,描述事件值中的内容有效载荷部分。换句话说,是第二种模式描述已更改行的结构。通常,这个模式包含嵌套的模式。

4

有效载荷

第二个有效载荷字段是事件值的一部分。它具有前面所描述的结构模式字段,它包含已更改行的实际数据。

默认情况下,连接器流将事件记录更改为主题,其名称与事件的原始表相同。看到主题名称

Debe开云体育官方注册网址zium Db2连接器确保所有Kafka Connect模式名称都遵循Avro模式名称格式.这意味着逻辑服务器名必须以拉丁字母或下划线开头,即a-z、a-z或_。逻辑服务器名中的每个剩余字符以及数据库名和表名中的每个字符必须是拉丁字母、数字或下划线,即a-z、a-z、0-9或\_。开云体育电动老虎机如果存在无效字符,则将其替换为下划线字符。

如果逻辑服务器名、数据库名或表名包含无效字符,并且区分名称之间的唯一字符无效,因此用下划线替换,则可能导致意外冲突。开云体育电动老虎机

此外,数据库、模式和表的Db2名称可以区开云体育电动老虎机分大小写。这意味着连接器可以向同一个Kafka主题发出多个表的事件记录。

更改事件键

更改事件的键包含已更改表的键和已更改行的实际键的模式。模式及其对应的有效负载都为更改后的表的每一列包含一个字段主键(或唯一约束)在连接器创建事件时。

考虑以下几点客户表,后面是此表的更改事件键的示例。

例表
CREATE TABLE customers (ID INTEGER IDENTITY(1001,1) NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR(255) NOT NULL, LAST_NAME VARCHAR(255) NOT NULL, EMAIL VARCHAR(255) NOT NULL UNIQUE);
更改事件键的示例

对象的更改的每个更改事件客户表具有相同的事件键模式。只要客户表具有前面的定义,则捕获对的更改的每个更改事件客户表的键结构如下。在JSON中,它看起来是这样的:

{"schema": {(1)"type": "struct", "fields": [(2){“类型”:“int32”、“可选”:假的,“场”:“ID”}],“可选”:假的,(3)“名称”:“mydat开云体育电动老虎机abase.MYSCHEMA.CUSTOMERS.Key”(4)}, "有效载荷":{(5)id: 1004}}
表6所示。更改事件键的描述
字段名 描述

1

模式

密钥的模式部分指定了一个Kafka Connect模式,该模式描述了密钥中的内容有效载荷部分。

2

字段

属性中期望的每个字段有效载荷,包括每个字段的名称、类型以及是否需要。

3.

可选

指示事件键是否必须在其中包含值有效载荷字段。在本例中,需要键的有效负载中的值。当表没有主键时,键的有效载荷字段中的值是可选的。

4

my开云体育电动老虎机database.MYSCHEMA.CUSTOMERS.Key

定义键的有效负载结构的模式的名称。此模式描述已更改表的主键的结构。关键模式名具有该格式connector-name开云体育电动老虎机数据库名称表名关键.在这个例子中:

  • my开云体育电动老虎机database生成此事件的连接器的名称。

  • MYSCHEMA包含已更改的表开云体育电动老虎机的数据库模式。

  • 客户已更新的表。

5

有效载荷

包含为其生成此更改事件的行的键。在本例中,键包含一个单键ID字段,其值为1004

更改事件值

change事件中的值比键稍微复杂一些。和键一样,值也有模式Section和a有效载荷部分。的模式类的模式信封的结构有效载荷节,包括其嵌套字段。用于创建、更新或删除数据的操作的更改事件都具有具有信封结构的值有效负载。

考虑用于显示更改事件键示例的同一个示例表:

例表
CREATE TABLE customers (ID INTEGER IDENTITY(1001,1) NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR(255) NOT NULL, LAST_NAME VARCHAR(255) NOT NULL, EMAIL VARCHAR(255) NOT NULL UNIQUE);

控件的每个更改事件的事件值部分客户表指定相同的模式。事件值的有效负载根据事件类型而变化:

创建事件

对象中创建数据的操作所生成的更改事件的值部分,示例如下客户表:

{"schema": {(1)"type": "struct", "fields": [{"type": "int32", "optional": false, "field": "ID"}, {"type": "string", "optional": false, "field": "FIRST_NAME"}, {"type": "string", "optional": false, "field": "LAST_NAME"}, {"type": "string", "optional": false, "field": "EMAIL"}], "optional": true, "name": "mydatabase.MYSCHEMA.CUSTOMERS.Value",开云体育电动老虎机(2)"field": "before"}, {"type": "struct", "fields": [{"type": "int32", "optional": false, "field": "ID"}, {"type": "string", "optional": false, "field": "LAST_NAME"}, {"type": "string", "optional": false, "field": "EMAIL"}], "optional": true, "name": "mydatabase.MYSCHEMA.CUSTOMERS. "开云体育电动老虎机价值", "field": "after" }, { "type": "struct", "fields": [ { "type": "string", "optional": false, "field": "version" }, { "type": "string", "optional": false, "field": "connector" }, { "type": "string", "optional": false, "field": "name" }, { "type": "int64", "optional": false, "field": "ts_ms" }, { "type": "boolean", "optional": true, "default": false, "field": "snapshot" }, { "type": "string", "optional": false, "field": "db" }, { "type": "string", "optional": false, "field": "schema" }, { "type": "string", "optional": false, "field": "table" }, { "type": "string", "optional": true, "field": "change_lsn" }, { "type": "string", "optional": true, "field": "commit_lsn" }, ], "optional": false, "name": "io.debezium.connector.db2.Source",(3)"field": "source"}, {"type": "string", "optional": false, "field": "op"}, {"type": "int64", "optional": true, "field": "ts_ms"}], "optional": false, "name": "mydataba开云体育电动老虎机se.MYSCHEMA.CUSTOMERS.Envelope"(4)}, "有效载荷":{(5)“之前”:空,(6)"后":{(7)“ID”:1005年,“FIRST_NAME”:“约翰”,“LAST_NAME”:“母鹿”、“电子邮件”:“john.doe@example.org”},“源”:{(8)“版本”:“2.1.2。Final", "connector": "db2", "name": "myconnector", "ts_ms": 1559729468470, "snapshot": false, "db": "my开云体育电动老虎机database", "schema": "MYSCHEMA", "table": "CUSTOMERS", "change_lsn": "00000027:00000758:0003", "commit_lsn": "00000027:00000758:0005",}, "op": "c",(9)“ts_ms”:1559729471739(10)}}
表7所示。的描述创建事件值字段
字段名 描述

1

模式

值的模式,它描述值的有效负载的结构。连接器为特定表生成的每个更改事件中,更改事件的值模式都是相同的。

2

的名字

模式节中,每的名字Field指定值的有效负载中字段的模式。

my开云体育电动老虎机database.MYSCHEMA.CUSTOMERS.Value有效负载的模式是之前而且字段。此模式特定于客户表格对象中的所有行都使用此模式MYSCHEMA。客户表格

的模式名称之前而且字段的格式为logicalNameschemaName的表value,确保模式名在数据库中是唯一的。开云体育电动老虎机这意味着当使用Avro转换器,每个逻辑源中每个表的结果Avro模式都有自己的演变和历史。

3.

的名字

io.开云体育官方注册网址debezium.connector.db2.Source有效负载的模式是字段。该模式特定于Db2连接器。连接器将其用于生成的所有事件。

4

的名字

my开云体育电动老虎机database.MYSCHEMA.CUSTOMERS.Envelope有效负载的总体结构的模式在哪里my开云体育电动老虎机database是数据库,开云体育电动老虎机MYSCHEMA是schema,和客户是桌子。

5

有效载荷

该值为实际数据。这是变更事件提供的信息。

事件的JSON表示似乎比它们所描述的行要大得多。这是因为JSON表示必须包括消息的模式部分和有效负载部分。然而,通过使用Avro转换器,你可以显著减少连接器流到Kafka主题的消息的大小。

6

之前

可选字段,指定事件发生之前行的状态。当人事处字段是c对于create,就像在本例中一样之前字段是因为这个更改事件是针对新内容的。

7

可选字段,指定事件发生后行的状态。在本例中,字段包含新行的值IDFIRST_NAMELAST_NAME,电子邮件列。

8

描述事件的源元数据的必填字段。的结构显示关于此更改的Db2信息,从而提供可跟踪性。它还提供了一些信息,可用于与同一主题中的其他事件或其他主题中的其他事件进行比较,以了解该事件是在其他事件之前发生、之后发生,还是作为同一提交的一部分发生。源元数据包括:

  • 开云体育官方注册网址Debezium版本

  • 连接器类型和名称

  • 在数据库中进行更改的时间戳开云体育电动老虎机

  • 事件是否是正在进行的快照的一部分

  • 包含新行的数据库、模式和开云体育电动老虎机表的名称

  • 改变LSN

  • 提交LSN(如果此事件是快照的一部分则省略)

9

人事处

返回string,描述导致连接器产生事件的操作类型。在这个例子中,c表示该操作创建了一行。有效值为:

  • c=创建

  • u=更新

  • d=删除

  • r= read(仅适用于快照)

10

ts_ms

可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。

对象,ts_ms指示在数据库中进行更改的时间。开云体育电动老虎机通过比较的值payload.source.ts_ms的值payload.ts_ms,您可以确定源数据库更新和Debezium之间的延迟。开云体育官方注册网址开云体育电动老虎机

更新事件

样例中更新的更改事件的值客户表的模式与创建事件。同样,更新事件值的有效负载具有相同的结构。事件值有效负载中包含不同的值更新事件。中的更新中连接器生成的事件中的更改事件值的示例客户表:

{"schema":{…}, "payload": {"before": {(1)“ID”:1005年,“FIRST_NAME”:“约翰”,“LAST_NAME”:“母鹿”、“电子邮件”:“john.doe@example.org”},“后”:{(2)“ID”:1005年,“FIRST_NAME”:“约翰”,“LAST_NAME”:“母鹿”、“电子邮件”:“noreply@example.org”},“源”:{(3)“版本”:“2.1.2。Final", "connector": "db2", "name": "myconnector", "ts_ms": 1559729995937, "snapshot": false, "db": "my开云体育电动老虎机database", "schema": "MYSCHEMA", "table": "CUSTOMERS", "change_lsn": "00000027:00000ac0:0002", "commit_lsn": "00000027:00000ac0:0007",}, "op": "u",(4)“ts_ms”:1559729998706(5)}}
表8所示。的描述更新事件值字段
字段名 描述

1

之前

可选字段,指定事件发生之前行的状态。在一个更新事件值,则之前字段包含每个表列的字段以及数据库提交前该列中的值。开云体育电动老虎机在本例中,请注意电子邮件值是john.doe@example.com

2

可选字段,指定事件发生后行的状态。你可以比较之前而且结构来确定对该行的更新内容。在本例中,电子邮件价值就是现在noreply@example.com

3.

描述事件的源元数据的必填字段。的字段结构中包含的字段与创建事件,但有些值是不同的,例如,示例更新事件有不同的lsp。您可以使用此信息将此事件与其他事件进行比较,以了解此事件是发生在其他事件之前、之后,还是作为同一提交的一部分。源元数据包括:

  • 开云体育官方注册网址Debezium版本

  • 连接器类型和名称

  • 在数据库中进行更改的时间戳开云体育电动老虎机

  • 事件是否是正在进行的快照的一部分

  • 包含新行的数据库、模式和开云体育电动老虎机表的名称

  • 改变LSN

  • 提交LSN(如果此事件是快照的一部分则省略)

4

人事处

返回string,描述操作类型。在一个更新事件值,则人事处字段值为u,表示该行因更新而更改。

5

ts_ms

可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。

对象,ts_ms指示在数据库中进行更改的时间。开云体育电动老虎机通过比较的值payload.source.ts_ms的值payload.ts_ms,您可以确定源数据库更新和Debezium之间的延迟。开云体育官方注册网址开云体育电动老虎机

更新一行的主键/唯一键的列将更改该行键的值。当一个键改变时,Debezium输出开云体育官方注册网址三个事件:删除事件和墓碑上的事件使用该行的旧键,然后使用该行的新键执行一个事件。

删除事件

的值删除改变事件有相同之处模式部分为创建而且更新同一表的事件。事件值有效载荷在一个删除事件。客户表是这样的:

{"schema":{…},}, "payload": {"before": {(1)“ID”:1005年,“FIRST_NAME”:“约翰”,“LAST_NAME”:“母鹿”、“电子邮件”:“noreply@example.org”},“后”:空,(2)“源”:{(3)“版本”:“2.1.2。Final", "connector": "db2", "name": "myconnector", "ts_ms": 1559730445243, "snapshot": false, "db": "my开云体育电动老虎机database", "schema": "MYSCHEMA", "table": "CUSTOMERS", "change_lsn": "00000027:00000db0:0005", "commit_lsn": "00000027:00000db0:0007"}, "op": "d",(4)“ts_ms”:1559730450205(5)}}
表9所示。的描述删除事件值字段
字段名 描述

1

之前

可选字段,指定事件发生之前行的状态。在一个删除事件值,则之前字段包含在数据库提交时删除该行之前该行中的值。开云体育电动老虎机

2

可选字段,指定事件发生后行的状态。在一个删除事件值,则字段是,表示该行已不存在。

3.

描述事件的源元数据的必填字段。在一个删除事件值,则字段结构与for相同创建而且更新同一表的事件。许多字段值也相同。在一个删除事件值,则ts_ms和LSN字段值,以及其他值,可能已经改变。但是,字段在删除事件值提供相同的元数据:

  • 开云体育官方注册网址Debezium版本

  • 连接器类型和名称

  • 在数据库中进行更改的时间戳开云体育电动老虎机

  • 事件是否是正在进行的快照的一部分

  • 包含新行的数据库、模式和开云体育电动老虎机表的名称

  • 改变LSN

  • 提交LSN(如果此事件是快照的一部分则省略)

4

人事处

返回string,描述操作类型。的人事处字段值为d,表示该行已被删除。

5

ts_ms

可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。

对象,ts_ms指示在数据库中进行更改的时间。开云体育电动老虎机通过比较的值payload.source.ts_ms的值payload.ts_ms,您可以确定源数据库更新和Debezium之间的延迟。开云体育官方注册网址开云体育电动老虎机

一个删除更改事件记录为使用者提供了处理删除该行所需的信息。包含旧值是因为一些使用者可能需要它们来正确处理删除。

Db2连接器事件设计用于处理Kafka对数压缩.日志压缩允许删除一些较旧的消息,只要每个键至少保留最近的消息。这让Kafka回收存储空间,同时确保主题包含一个完整的数据集,并可用于重新加载基于键的状态。

删除一行时,删除event值仍然适用于日志压缩,因为Kafka可以删除所有具有相同键的早期消息。然而,Kafka要删除所有具有相同键的消息,消息值必须为.为了实现这一点,在Debezium的Db2连接器发出开云体育官方注册网址删除事件时,连接器发出一个特殊的墓碑事件,该事件具有相同的键,但具有价值。

数据类型映射

中描述了Db2的数据类型Db2 SQL数据类型

Db2连接器用事件表示行更改,事件的结构类似于行所在的表。该事件为每个列值包含一个字段。该值在事件中如何表示取决于列的Db2数据类型。本节描述这些映射。如果默认的数据类型转换不能满足您的需求,您可以这样做创建自定义转换器对于连接器。

基本类型

下表描述了连接器如何将每个Db2数据类型映射到文字类型和一个语义类型在事件字段中。

  • 文字类型描述了如何使用Kafka Connect模式类型来表示值:INT8INT16INT32INT64FLOAT32FLOAT64布尔字符串字节数组地图,结构体

  • 语义类型描述了Kafka Connect模式如何捕获意义该字段使用Kafka Connect模式的名称。

表10。Db2基本数据类型的映射
Db2数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

布尔

布尔

只能从具有BOOLEAN类型列的表中获取快照。目前Db2上的SQL Replication不支持BOOLEAN,因此Debezium不能对这些表执行CDC。开云体育官方注册网址考虑使用不同的类型。

长整型数字

INT64

N/A

二进制

字节

N/A

字节

N/A

CHAR ((N))

字符串

N/A

CLOB

字符串

N/A

日期

INT32

io.开云体育官方注册网址debezium.time.Date

没有时区信息的时间戳字符串表示形式

DECFLOAT

字节

org.apache.kafka.connect.data.Decimal

小数

字节

org.apache.kafka.connect.data.Decimal

DBCLOB

字符串

N/A

FLOAT64

N/A

整数

INT32

N/A

真正的

FLOAT32

N/A

短整型

INT16

N/A

时间

INT32

io.开云体育官方注册网址debezium.time.Time

没有时区信息的时间字符串表示形式

时间戳

INT64

io.开云体育官方注册网址debezium.time.MicroTimestamp

没有时区信息的时间戳字符串表示形式

VARBINARY

字节

N/A

VARCHAR ((N))

字符串

N/A

VARGRAPHIC

字符串

N/A

XML

字符串

io.开云体育官方注册网址debezium.data.Xml

XML文档的字符串表示形式

如果存在,列的默认值将被传播到相应字段的Kafka Connect模式。更改事件包含字段的默认值,除非给出了显式的列值。因此,很少需要从模式中获取默认值。传递默认值有助于满足兼容性规则使用Avro作为序列化格式以及Confluent模式注册中心。

时间类型

除了Db2之外DATETIMEOFFSET类型的值,其中包含时区信息,时态类型的映射方式取决于time.precision.mode连接器配置属性。下面几节描述这些映射:

time.precision.mode =自适应

time.precision.mode配置属性设置为自适应,则连接器根据列的数据类型定义确定文字类型和语义类型。这确保了事件完全表示数据库中的值。开云体育电动老虎机

表11所示。映射时time.precision.mode自适应
Db2数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

日期

INT32

io.开云体育官方注册网址debezium.time.Date

表示自纪元以来的天数。

时间(0)时间(1)时间(2)(3)

INT32

io.开云体育官方注册网址debezium.time.Time

表示午夜过后的毫秒数,不包括时区信息。

(4)时间(5)(6)

INT64

io.开云体育官方注册网址debezium.time.MicroTime

表示午夜过后的微秒数,不包括时区信息。

时间(7)

INT64

io.开云体育官方注册网址debezium.time.NanoTime

表示午夜过后的纳秒数,不包括时区信息。

DATETIME

INT64

io.开云体育官方注册网址debezium.time.Timestamp

表示从纪元开始的毫秒数,不包括时区信息。

time.precision.mode =连接

time.precision.mode配置属性设置为连接,连接器使用Kafka Connect逻辑类型。当消费者只能处理内置的Kafka Connect逻辑类型而不能处理可变精度的时间值时,这可能很有用。但是,由于Db2支持十分之一微秒的精度,因此使用连接器生成的事件连接时间精度导致精度的损失当数据库列具有开云体育电动老虎机分数秒精度大于3的值。

表12。映射时time.precision.mode连接
Db2数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

日期

INT32

org.apache.kafka.connect.data.Date

表示自纪元以来的天数。

时间([P])

INT64

org.apache.kafka.connect.data.Time

表示从午夜开始的毫秒数,不包括时区信息。Db2允许P在0-7范围内存储高达十分之一微秒的精度,尽管这种模式会导致精度损失P大于3。

DATETIME

INT64

org.apache.kafka.connect.data.Timestamp

表示从纪元开始的毫秒数,不包括时区信息。

时间戳类型

DATETIME类型表示不包含时区信息的时间戳。这些列将转换为基于UTC的等效Kafka Connect值。例如,DATETIME取值“2018-06-20 15:13:16.945104”由io.开云体育官方注册网址debezium.time.Timestamp值为“1529507596000”。

运行Kafka Connect和Debezium的JVM的时区不会影响这种转换。开云体育官方注册网址

十进制类型

Db2数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

数字((P (S)))

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数,表示小数点移位了多少位。的connect.decimal.precision模式参数包含一个整数,表示给定十进制值的精度。

小数((P (S)))

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数,表示小数点移位了多少位。的connect.decimal.precision模式参数包含一个整数,表示给定十进制值的精度。

设置Db2

为了让D开云体育官方注册网址ebezium捕获提交给Db2表的变更事件,具有必要权限的Db2数据库管理员必须在数据库中配置表以捕获变更数据。开云体育电动老虎机在开始运行Debezium之后,您可以调整捕获开云体育官方注册网址代理的配置以优化性能。

将表放入捕获模式

为了使表进入捕获模式,Debezium提供了一组用户定义函数(ud开云体育官方注册网址f)。这里的过程展示了如何安装和运行这些管理udf。或者,您也可以运行Db2控制命令将表置于捕获模式。然后,管理员必须为希望Debezium捕获的每个表启用CDC。开云体育官方注册网址

先决条件
过程
  1. 方法在Db2服务器主机上开云体育官方注册网址编译Debezium管理udfbldrtnDb2提供的命令:

    cd $ HOME / asncdctools / src
    。/ bldrtn asncdc
  2. 如果数据库尚未运行,开云体育电动老虎机则启动数据库。取代DB_NAME您希望Debezium连接到的数据库的名称开云体育电动老虎机。开云体育官方注册网址

    db2 start db DB_NAME
  3. 确保JDBC可以读取Db2元数据目录:

    cd $ HOME / sqllib / bnd
    Db2绑定db2schema。BND正在阻塞所有授予公共sqlerror继续
  4. 确保数据库最近进行了备份。开云体育电动老虎机ASN代理必须有一个最近的起始点来读取。如果您需要执行备份,请运行以下命令,这些命令将对数据进行修剪,以使只有最新版本可用。如果不需要保留数据的旧版本,请指定dev /空用于备份位置。

    1. 备份数据库。开云体育电动老虎机取代DB_NAME而且BACK_UP_LOCATION适当的值:

      db2 backup db DB_NAME到BACK_UP_LOCATION
    2. 重新启动数据库:开云体育电动老虎机

      db2 restart db DB_NAME
  5. 连接到数据库以安装Debezi开云体育电动老虎机um管理udf。开云体育官方注册网址假设您以db2instl用户,因此udf应该安装在db2inst1用户。

    db2连接到DB_NAME
  6. 复制Debeziu开云体育官方注册网址m管理udf并为它们设置权限:

    cp $HOME/asncdctools/src/asncdc $HOME/sqllib/function
    chmod 777 $HOME/sqllib/函数
  7. 启用启动和停止ASN捕开云体育官方注册网址获代理的Debezium UDF:

    db2 -tvmf $HOME/asncdctools/src/asncdc_UDF.sql
  8. 创建ASN控制表:

    $ db2 -tvmf $HOME/asncdctools/src/asncdctables.sql
  9. 启用Debezium 开云体育官方注册网址UDF将表添加到捕获模式并从捕获模式中删除表:

    $ db2 -tvmf $HOME/asncdctools/src/asncdcaddremove.sql

    在设置Db2服务器之后,使用udf使用SQL命令控制Db2复制(ASN)。有些udf需要返回值,在这种情况下使用SQL价值语句来调用它们。对于其他udf,使用SQL调用声明。

  10. 启动ASN agent:

    值ASNCDC.ASNCDCSERVICES(“开始”、“asncdc”);

    上面的语句返回以下结果之一:

    • Asncap已经在运行

    • 开始- - ><命令>

      在本例中,输入指定的<命令>在终端窗口中,示例如下:

      /开云体育电动老虎机database/config/db2inst1/sqllib/bin/asncap capture_schema=asncdc capture_server=SAMPLE &
  11. 将表放入捕获模式。为希望放入捕获的每个表调用以下语句。取代MYSCHEMA包含要放入捕获模式的表的模式的名称。同样,取代MYTABLE输入要进入捕获模式的表的名称:

    ASNCDC打电话。一个DDTABLE('MYSCHEMA', 'MYTABLE');
  12. 重新初始化ASN服务:

    值ASNCDC.ASNCDCSERVICES(“reinit”、“asncdc”);

Db2捕获代理配置对服务器负载和延迟的影响

当数据库管理员开云体育电动老虎机为源表启用更改数据捕获时,捕获代理将开始运行。代理从事务日志中读取新的更改事件记录,并将事件记录复制到捕获表中。从在源表中提交更改的时间到在相应的更改表中出现更改的时间之间,总是有一个很小的延迟间隔。这个延迟间隔表示源表中发生更改和Debezium可以将更改流传输到Apache Kafka之间的间隔。开云体育官方注册网址

理想情况下,对于必须快速响应数据更改的应用程序,您希望在源表和捕获表之间保持密切的同步。您可能会想象,运行捕获代理以尽可能快地持续处理更改事件可能会增加吞吐量并减少延迟——在事件发生后,尽可能快地用新的事件记录填充更改表,几乎是实时的。然而,事实未必如此。在追求更即时的同步时,需要付出性能代价。每次更改代理在数据库中查询新的事件记录时,都会增加数据库主机上的CPU负载。开云体育电动老虎机服务器上的额外负载可能会对整个数据库性能产生负面影响,并可能降低事务效率,特别是在数据库使用高峰期间。开云体育电动老虎机

监视数据库指标非常重要,这样您就可以知道数据库是否达开云体育电动老虎机到了服务器不再支持捕获代理活动级别的地步。如果在运行捕获代理时遇到性能问题,请调整捕获代理设置以减少CPU负载。

Db2捕获代理配置参数

在Db2上,IBMSNAP_CAPPARMS表包含控制捕获代理行为的参数。您可以调整这些参数的值,以平衡捕获过程的配置,以减少CPU负载,并仍然保持可接受的延迟级别。

关于如何配置Db2捕获代理参数的具体指导超出了本文档的范围。

IBMSNAP_CAPPARMS表中,以下参数对降低CPU负载的效果最大:

COMMIT_INTERVAL
  • 指定捕获代理等待向更改数据表提交数据的秒数。

  • 较高的值会减少数据库主机上的负载并增加延迟。开云体育电动老虎机

  • 默认值为30.

SLEEP_INTERVAL
  • 指定捕获代理到达活动事务日志结束后等待启动新提交周期的秒数。

  • 较高的值会减少服务器上的负载,并增加延迟。

  • 默认值为5

额外的资源
  • 有关捕获代理参数的更多信息,请参阅Db2文档。

部署

要部署Debezium 开云体育官方注册网址Db2连接器,您需要安装Debezium Db2连接器存档,配置连接器,并通过将其配置添加到Kafka Connect来启动连接器。

先决条件
过程
  1. 下载开云体育官方注册网址Debezium Db2连接器插件存档来自Maven中心。

  2. 将JAR文件解压缩到Kafka Connect环境中。

  3. 下载Db2的JDBC驱动程序从Maven Central,并将下载的驱动程序文件解压缩到包含Debezium Db2连接器JAR文件(即,开云体育官方注册网址开云体育官方注册网址debezium-connector-db2-2.1.2.Final.jar).

    由于许可要求,Debezium Db2连接器存档不包括Debezium开云体育官方注册网址连接到Db2数据库所需的Db2 JDBC驱动程序。开云体育电动老虎机要使连接器能够访问数据库,必须将驱动程序添加到连接器环境中。开云体育电动老虎机

  4. 将包含JAR文件的目录添加到卡夫卡连接的plugin.path

  5. 重新启动Kafka Connect进程以获取新的JAR文件。

如果使用不可变容器,请参见开云体育官方注册网址Debezium的容器图像对于Apache ZooKeeper, Apache Kafka和Kafka Connect, Db2连接器已经安装并准备运行。

Db2连接器配置示例

下面是一个连接器实例的配置示例,该连接器实例从端口50000上的192.168.99.100(我们在逻辑上命名为192.168.99.100)的Db2服务器捕获数据fullfillment.通常,通过设置连接器可用的配置属性,可以在JSON文件中配开云体育官方注册网址置Debezium Db2连接器。

您可以选择为数据库中的模式和表的子集生成事件。开云体育电动老虎机可选地,您可以忽略、屏蔽或截断包含敏感数据的列、大于指定大小的列或不需要的列。

{"name": "db2-connector",(1)"config": {"connector.class": "io.d开云体育官方注册网址ebezium.connector. db2connector ",(2)“开云体育电动老虎机数据库。主机名”:“192.168.99.100”,(3)“开云体育电动老虎机数据库。港”:“50000”,(4)“开云体育电动老虎机数据库。user": "db2inst1",(5)“开云体育电动老虎机数据库。密码”:“密码!”(6)“开云体育电动老虎机数据库。dbname": "mydatabase",(7)”的话题。前缀”:“fullfillment”,(8)“table.include。”:“MYSCHEMA列表。客户”,(9)“schema.history.internal.kafka.bootstrap.servers”:“卡夫卡:9092”,(10):“schema.history.internal.kafka.topic schemahistory.fullfillment”(11)}}
1 在Kafka Connect服务中注册连接器时的名称。
2 这个Db2连接器类的名称。
3. Db2实例的地址。
4 Db2实例的端口号。
5 Db2用户的名称。
6 Db2用户的密码。
7 要从中捕获更改的数据库的名称。开云体育电动老虎机
8 Db2实例/集群的逻辑名称,它形成了一个名称空间,并且在连接器写入的所有Kafka主题的名称、Kafka Connect模式名称以及相应Avro模式的名称空间中使用Avro连接器使用。
9 Debezium应该捕获其更改的所有表的列表。开云体育官方注册网址
10 这个连接器用来将DDL语句写入并恢复到数据库模式历史主题的Kafka代理列表。开云体育电动老虎机
11 连接器在其中写入和恢复DDL语句开云体育电动老虎机的数据库模式历史主题的名称。此主题仅供内部使用,消费者不应使用。

有关可以为Debezium Db2连接器设置的配置属性的完整列表,请参见开云体育官方注册网址Db2连接器属性

您可以使用帖子命令到正在运行的Kafka Connect服务。该服务记录配置并启动一个执行以下操作的连接器任务:

  • 连接到Db2数据库。开云体育电动老虎机

  • 读取处于捕获模式的表的更改数据表。

  • 流将事件记录更改为Kafka主题。

添加连接器配置

要开始运行Db2连接器,需要创建一个连接器配置,并将该配置添加到Kafka Connect集群中。

先决条件
  • 启用了Db2复制为处于捕获模式的表公开更改数据。

  • 安装Db2连接器。

过程
  1. 为Db2连接器创建一个配置。

  2. 使用Kafka连接REST API将该连接器配置添加到Kafka Connect集群中。

结果

连接器启动后,它将执行一致性快照配置连接器为其捕获更改开云体育电动老虎机的Db2数据库表。然后连接器开始为行级操作生成数据更改事件,并将更改事件记录流式传输到Kafka主题。

连接器属性

Debe开云体育官方注册网址zium Db2连接器具有许多配置属性,您可以使用这些属性为应用程序实现正确的连接器行为。许多属性都有默认值。属性信息组织如下:

必需的Debezi开云体育官方注册网址um Db2连接器配置属性

以下配置属性为要求除非有默认值可用。

财产 默认的 描述

没有默认的

连接器的唯一名称。尝试使用相同的名称再次注册将失败。所有Kafka Connect连接器都需要这个属性。

没有默认的

连接器的Java类的名称。始终使用值io.开云体育官方注册网址debezium.connector.db2.Db2Connector用于Db2连接器。

1

应该为此连接器创建的最大任务数。Db2连接器总是使用单个任务,因此不使用这个值,所以默认值总是可以接受的。

没有默认的

Db2数据库服务器的IP地址或主机名。开云体育电动老虎机

50000

Db2数据库服务器的整型端口号。开云体育电动老虎机

没有默认的

连接Db2数据库服务器的Db2数开云体育电动老虎机据库用户名。

没有默认的

连接到Db2数据库服务器时使用的密码。开云体育电动老虎机

没有默认的

用于传输更改的Db2数据库的名称开云体育电动老虎机

没有默认的

主题前缀,它为承载数据库的特定Db2数据库服务器提供名称空间,Debezium正在为该数据库捕获更改。开云体育官方注册网址开云体育电动老虎机主题前缀名称只能使用字母数字、连字符、点和下划线。主题前缀在所有其他连接器中应该是唯一的,因为这个主题前缀用于从该连接器接收记录的所有Kafka主题。

不要更改此属性的值。如果更改了name值,在重新启动后,连接器不会继续向原始主题发出事件,而是向名称基于新值的主题发出后续事件。连接器也无法恢复其数据库模式历史记录主题。开云体育电动老虎机

没有默认的

一个可选的、以逗号分隔的正则表达式列表,它匹配您希望连接器捕获其更改的表的完全限定表标识符。设置此属性时,连接器仅从指定的表捕获更改。每个标识符都是这样的schemaName的表.默认情况下,连接器捕获每个非系统表中的更改。

为了匹配表的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配,而不与表名中可能出现的子字符串匹配。
如果在配置中包含此属性,则不要同时设置table.exclude.list财产。

没有默认的

一个可选的、以逗号分隔的正则表达式列表,用于匹配您不希望连接器捕获其更改的表的完全限定表标识符。连接器捕获未包含在排除列表中的每个非系统表中的更改。每个标识符都是这样的schemaName的表

为了匹配表的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配,而不与表名中可能出现的子字符串匹配。
如果在配置中包含此属性,则不要同时设置table.include.list财产。

空字符串

一个可选的、以逗号分隔的正则表达式列表,它匹配要包含在变更事件记录值中的列的完全限定名称。列的完全限定名的格式为schemaName的表columnName

为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;它不匹配可能出现在列名中的子字符串。如果在配置中包含此属性,则不要同时设置column.exclude.list财产。

空字符串

一个可选的、以逗号分隔的正则表达式列表,它匹配要从更改事件值中排除的列的完全限定名称。列的完全限定名的格式为schemaName的表columnName

为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;它不匹配可能出现在列名中的子字符串。主键列总是包含在事件的键中,即使它们从值中被排除。如果在配置中包含此属性,则不要设置column.include.list财产。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为schemaName的表columnName
为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。在产生的更改事件记录中,指定列的值将被假名替换。

假名由应用指定的参数产生的散列值组成hashAlgorithm而且.根据所使用的散列函数,将维护引用完整性,而列值将被假名替换。中描述了支持的哈希函数MessageDigest节Java密码体系结构标准算法名称文档。

在下面的例子中,CzQMA0cB5K是随机选择的盐。

column.mask.hash.sha with.salt——256.。CzQMA0cB5K =库存。订单。customerName, inventory.shipment.customerName

必要时,笔名会自动缩短为列的长度。连接器配置可以包括多个属性,这些属性指定不同的哈希算法和盐。

取决于hashAlgorithm使用,选中的数据集与实际数据集相匹配时,得到的数据集可能不会被完全屏蔽。

自适应

时间、日期和时间戳可以用不同的精度表示:

自适应根据数据库列的类型,使用毫秒、微秒或纳秒精度值捕获与数据库中完全相同的时间和时间戳值。开云体育电动老虎机

连接always通过使用Kafka Connect的内置表示来表示时间和时间戳值时间日期,时间戳,它使用毫秒精度,而不考虑数据库列的精度。开云体育电动老虎机看到时间值

真正的

控制是否删除事件之后是一个墓碑事件。

真正的-删除操作用a表示删除事件和后续的墓碑事件。

-只有一个删除事件被触发。

当一个源记录被删除后,触发一个墓碑事件(默认行为)允许Kafka完全删除与被删除行的键相关的所有事件日志压实已为主题启用。

真正的

布尔值,指定连接器是否应该将数据库模式中的更改发布到与数据库服务器ID同名的Kafka主题。开云体育电动老虎机每个模式更改都用一个包含数据库名称的键和一个描述模式更新的JSON结构值来记录。开云体育电动老虎机这与连接器内部记录数据库模式历史的方式无关。开云体育电动老虎机

N/A

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。类指定的字符数时,如果要截断一组列中的数据,请设置此属性长度属性名。集长度到正整数值,例如,column.truncate.to.20.chars

列的完全限定名遵循以下格式:schemaName的表columnName.为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。

您可以在单个配置中指定具有不同长度的多个属性。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。如果希望连接器屏蔽一组列的值,请设置此属性,例如,如果这些列包含敏感数据。集长度为正整数,以将指定列中的数据替换为星号()指定的字符长度属性名。集长度0(0)将指定列中的数据替换为空字符串。

列的完全限定名遵循以下格式:schemaName的表columnName
为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。

您可以在单个配置中指定具有不同长度的多个属性。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与您希望连接器为其发出表示列元数据的额外参数的列的完全限定名称匹配。设置此属性后,连接器将向事件记录模式添加以下字段:

  • __开云体育官方注册网址debezium.source.column.type

  • __开云体育官方注册网址debezium.source.column.length

  • __开云体育官方注册网址debezium.source.column.scale

这些参数分别传播列的原始类型名称和长度(对于变宽类型)。
启用连接器发出这些额外的数据可以帮助适当调整接收器数据库中特定的数字或基于字符的列的大小。开云体育电动老虎机

列的完全限定名遵循以下格式之一:开云体育电动老虎机数据库名的表columnName,或开云体育电动老虎机数据库名schemaName的表columnName
为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。

N/A

一个可选的、以逗号分隔的正则表达式列表,用于指定为数据库中的列定义的数据类型的完全限定名称。开云体育电动老虎机当设置此属性时,对于具有匹配数据类型的列,连接器将发出事件记录,其中在其模式中包含以下额外字段:

  • __开云体育官方注册网址debezium.source.column.type

  • __开云体育官方注册网址debezium.source.column.length

  • __开云体育官方注册网址debezium.source.column.scale

这些参数分别传播列的原始类型名称和长度(对于变宽类型)。
启用连接器发出这些额外的数据可以帮助适当调整接收器数据库中特定的数字或基于字符的列的大小。开云体育电动老虎机

列的完全限定名遵循以下格式之一:开云体育电动老虎机数据库名的表typeName,或开云体育电动老虎机数据库名schemaName的表typeName
为了匹配数据类型的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与数据类型的整个名称字符串匹配;表达式与类型名中可能出现的子字符串不匹配。

有关特定于db2的数据类型名称的列表,请参见Db2数据类型映射

空字符串

一个表达式列表,用于指定连接器用来为发布到指定表的Kafka主题的更改事件记录形成自定义消息键的列。

默认情况下,Debezi开云体育官方注册网址um使用表的主键列作为它发出的记录的消息键。为了代替默认值,或者为缺少主键的表指定一个键,您可以基于一个或多个列配置自定义消息键。

若要为表建立自定义消息键,请列出表,然后列出用作消息键的列。每个列表条目采用以下格式:

< fully-qualified_tableName >< keyColumn >< keyColumn >

若要基于多个列名创建表键,请在列名之间插入逗号。
每个全限定表名都是一个正则表达式,格式如下:

< schemaName ><表>

该属性可以列出多个表的条目。使用分号分隔列表中不同表的条目。

下面的示例为表设置消息键inventory.customers而且

inventory.customers: pk1 pk2; (. *) .purchaseorders: pk3 pk4

在前面的例子中,列pk1而且pk2是否指定为表的消息键inventory.customer.为任何模式中的表,列pk3而且pk4作为消息键。

没有一个

指定应如何调整模式名称以与连接器使用的消息转换器兼容。可能的设置:

  • 没有一个不应用任何调整。

  • avro将不能在Avro类型名称中使用的字符替换为下划线。

高级连接器配置属性

以下先进的配置属性具有在大多数情况下都适用的默认值,因此很少需要在连接器的配置中指定。

财产 默认的 描述

没有默认的

属性的符号名称的逗号分隔列表自定义转换器连接器可以使用的实例。例如,

国际标准图书编号

您必须设置转换器属性使连接器能够使用自定义转换器。

对于为连接器配置的每个转换器,还必须添加.type属性,该属性指定实现转换器接口的类的全限定名称。的.type属性使用以下格式:

< converterSymbolicName >.type

例如,

isbn。类型:io.debezium.test.IsbnConverter

如果希望进一步控制已配置转换器的行为,可以添加一个或多个配置参数来将值传递给转换器。若要将任何其他配置参数与转换器关联起来,请在参数名称前加上转换器的符号名称。
例如,

isbn.schema.name: io.开云体育官方注册网址debezium.db2.type.Isbn

最初的

指定连接器启动时执行快照的条件:

最初的—对于处于捕获模式的表,连接器对表的模式和表中的数据进行快照。这对于用数据的完整表示填充Kafka主题非常有用。

initial_only-像初始化那样对结构和数据进行快照,但在快照完成后不会转换为流更改。

schema_only—对于处于捕获模式的表,连接器仅对表的模式进行快照。当从现在开始发生的更改只需要发送到Kafka主题时,这是有用的。快照完成后,连接器继续从数据库的重做日志中读取更改事件。开云体育电动老虎机

repeatable_read

在快照期间,控制事务隔离级别以及连接器锁定处于捕获模式的表的时间。可能取值为:

read_uncommitted—不阻止其他事务在初始快照期间更新表行。该模式没有数据一致性保证;某些数据可能丢失或损坏。

read_committed—不阻止其他事务在初始快照期间更新表行。一条新记录可能出现两次:一次在初始快照中,一次在流阶段。但是,这种一致性级别适用于数据镜像。

repeatable_read—防止其他事务在初始快照期间更新表行。一条新记录可能出现两次:一次在初始快照中,一次在流阶段。但是,这种一致性级别适用于数据镜像。

独家—使用可重复的读隔离级别,但对所有要读的表采用排他锁。此模式可防止其他事务在初始快照期间更新表行。只有独家模式保证完全一致性;初始快照和流日志构成线性历史记录。

失败

指定连接器在处理事件期间如何处理异常。可能取值为:

失败—连接器记录问题事件的偏移量,并停止处理。

警告—连接器记录有问题事件的偏移量,并继续处理下一个事件。

跳过—连接器跳过有问题的事件并继续处理下一个事件。

500

正整数值,指定连接器在开始处理一批事件之前等待新更改事件出现的毫秒数。缺省值为1000毫秒,即1秒。

2048

正整数值,指定连接器处理的每批事件的最大大小。

8192

正整数值,指定阻塞队列可以容纳的最大记录数。当Debe开云体育官方注册网址zium从数据库读取事件流时,它会在将事件写入Kafka之前开云体育电动老虎机将其放在阻塞队列中。如果连接器接收消息的速度比写入Kafka的速度快,或者Kafka变得不可用,阻塞队列可以为从数据库读取更改事件提供反压力。开云体育电动老虎机当连接器定期记录偏移量时,队列中保存的事件将被忽略。总是设置的值max.queue.size大于…的值max.batch.size

0

一个长整数值,以字节为单位指定阻塞队列的最大容量。默认情况下,不为阻塞队列指定卷限制。若要指定队列可以使用的字节数,请将此属性设置为正的长值。
如果max.queue.size时,当队列大小达到任一属性指定的限制时,将阻塞对队列的写入。例如,如果你设置max.queue.size = 1000,max.queue.size.in.bytes = 5000,当队列中有1000条记录时,或者队列中记录的容量达到5000字节时,写入队列被阻塞。

0

控制连接器向Kafka主题发送心跳消息的频率。默认行为是连接器不发送心跳消息。

心跳消息对于监视连接器是否正在接收来自数据库的更改事件非常有用。开云体育电动老虎机心跳消息可能有助于减少连接器重新启动时需要重新发送的更改事件的数量。要发送心跳消息,请将此属性设置为正整数,表示心跳消息之间的毫秒数。

当数据库中有许多更新被跟踪,但处于捕获模式的表中只有少量更新时,心跳消息非常有用。开云体育电动老虎机在这种情况下,连接器像往常一样从数据库事务日志中读取,但很少向Kafka发出更改记录。开云体育电动老虎机这意味着连接器很少有机会向Kafka发送最新的偏移量。通过发送心跳消息,连接器可以将最新的偏移量发送到Kafka。

没有默认的

在连接器启动时执行快照之前,连接器应等待的毫秒间隔。如果在集群中启动多个连接器,此属性有助于避免快照中断,因为快照中断可能导致连接器的重新平衡。

中指定的所有表table.include.list

匹配完全限定名称的可选、逗号分隔的正则表达式列表(< schemaName >。<表>)中包含在快照中的表。指定的项必须在连接器的table.include.list财产。此属性仅在连接器为snapshot.mode属性的值设置为从来没有
此属性不影响增量快照的行为。

为了匹配表的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配表名中可能存在的子字符串。

2000

在快照期间,连接器以行为单位读取表内容。此属性指定批处理中的最大行数。

10000

正整数值,指定在执行快照时等待获得表锁的最大时间(以毫秒为单位)。如果连接器在此间隔内无法获取表锁,则快照失败。连接器如何执行快照提供细节。其他可能的设置有:

0—当连接器无法获取锁时,立即失效。

-1—连接器无限等待。

没有默认的

指定要包含在快照中的表行。如果希望快照仅包含表中行的子集,请使用此属性。此属性仅影响快照。它不适用于连接器从日志中读取的事件。

属性包含表单中以逗号分隔的全限定表名列表< schemaName >。<表>.例如,

“snapshot.select.statement。覆盖”:“inventory.products customers.orders”

对于列表中的每个表,再添加一个配置属性,用于指定选择语句,以便连接器在获取快照时在表上运行。指定的选择语句确定要包含在快照中的表行子集。使用以下格式指定此文件的名称选择声明属性:

snapshot.select.statement.overrides。< schemaName ><表>.例如,snapshot.select.statement.overrides.customers.orders

例子:

从一个customers.orders包含软删除列的表,delete_flag,如果您希望快照只包含那些未被软删除的记录,则添加以下属性:

“snapshot.select.statement。覆盖”:“客户。或ders", "snapshot.select.statement.overrides.customer.orders": "SELECT * FROM [customers].[orders] WHERE delete_flag = 0 ORDER BY id DESC"

在生成的快照中,连接器仅包括其记录Delete_flag = 0

真正的如果连接器配置设置key.convertervalue.converter属性到Avro转换器。

如果不是。

指示是否对字段名进行清除以遵守Avro命名要求

确定连接器是否生成具有事务边界的事件,并使用事务元数据丰富更改事件信封。指定真正的如果您希望连接器执行此操作。看到事务的元数据获取详细信息。

t

以逗号分隔的操作类型列表,将在流处理期间跳过。操作包括:c插入/创建、u的更新,d删除,t对于截断,和没有一个不跳过任何操作。默认情况下,截断操作将被跳过(此连接器不会触发)。

没有默认的

用于发送的数据集合的完全限定名称信号到连接器。使用以下格式指定集合名称:
< schemaName ><表>

1024

在增量快照块期间连接器获取并读入内存的最大行数。增加块大小可以提供更高的效率,因为快照运行更少的大大小快照查询。但是,较大的块大小也需要更多内存来缓冲快照数据。将块大小调整为在您的环境中提供最佳性能的值。

io.开云体育官方注册网址debezium.schema.SchemaTopicNamingStrategy

TopicNamingStrategy类的名称默认为,该类应用于确定数据更改、模式更改、事务、心跳事件等的主题名称SchemaTopicNamingStrategy

指定主题名称的分隔符,默认为

10000

用于在有界并发散列映射中保存主题名称的大小。此缓存将帮助确定与给定数据集合对应的主题名称。

__开云体育官方注册网址debezium-heartbeat

控制连接器向其发送心跳消息的主题的名称。主题名称有这样的模式:

topic.heartbeat.prefixtopic.prefix

例如,如果主题前缀为实现,默认主题名为__开云体育官方注册网址debezium-heartbeat.fulfillment

事务

控制连接器向其发送事务元数据消息的主题的名称。主题名称有这样的模式:

topic.prefixtopic.transaction

例如,如果主题前缀为实现,默认主题名为fulfillment.transaction

开云体育官方注册网址Debezium连开云体育电动老虎机接器数据库模式历史配置属性

开云体育官方注册网址Debezium提供了一组schema.history.internal。*属性,这些属性控制连接器如何与模式历史主题交互。

下表描述了schema.history.internal属性用于配置Debezium连接器。开云体育官方注册网址

表13。连接器数据库模式历史开云体育电动老虎机配置属性
财产 默认的 描述

没有默认的

连接器存储数据库模式历史的Kafka主题的全称。开云体育电动老虎机

没有默认的

连接器用来建立到Kafka集群的初始连接的主机/端口对列表。此连接用于检索以前由连接器存储的数据库模式历史,并用于写入从源数据库读取的每个DDL语开云体育电动老虎机句。每一对都应该指向Kafka Connect进程使用的相同的Kafka集群。

One hundred.

一个整数值,指定连接器在启动/恢复期间轮询持久数据时应等待的最大毫秒数。默认值是100ms。

3000

一个整数值,指定连接器在使用Kafka管理客户端获取集群信息时应该等待的最大毫秒数。

30000

一个整数值,指定连接器在使用kafka管理客户端创建kafka历史主题时应该等待的最大毫秒数。

One hundred.

在连接器恢复失败并发生错误之前,连接器应尝试读取持久历史数据的最大次数。接收不到数据后等待的最大时间为recovery.attempts×recovery.poll.interval.ms

一个布尔值,指定连接器是否应该忽略格式错误或未知的数据库语句,还是停止处理以便人工修复问题。开云体育电动老虎机安全默认值为.在处理binlog时,应该小心使用跳过,因为它可能导致数据丢失或损坏。

一个布尔值,指定连接器是否应该记录所有DDL语句

真正的只记录那些DDL语句,这些语句与Debezium正在捕获的表的更改相关。开云体育官方注册网址设置为真正的要小心,因为如果您更改捕获了哪些表的更改,则可能需要丢失数据。

安全默认值为

用于配置生产者和使用者客户开云体育电动老虎机机的传递数据库模式历史属性


开云体育官方注册网址Debezium依赖Kafka生成器将模式更改写入数据库模式历史主题。开云体育电动老虎机类似地,当连接器启动时,它依赖于Kafka消费者从数据库模式历史主题中读取。开云体育电动老虎机为Kafka生产者和消费者客户端定义配置,方法是将值赋给一组以schema.history.internal.producer。*而且schema.history.internal.consumer。*前缀。直通生产者和消费者数据库模式历史属性控制一系列行为,比如这些客户端如何保护与K开云体育电动老虎机afka代理的连接,如下例所示:

SSL schema.history.internal.producer.ssl.keystore.location schema.history.internal.producer.security.protocol = = / var /私人/ SSL / kafka.server.keystore.jks schema.history.internal.producer.ssl.keystore.password = test1234 schema.history.internal.producer.ssl.truststore.location = / var /私人/ SSL / kafka.server.truststore.jks schema.history.internal.producer.ssl.truststore.password = test1234 schema.history.internal.producer.ssl.key.password = test1234 schema.history.internal.consumer.security.protocol = SSLSchema.history.internal.consumer.ssl.keystore.location =/var/private/ssl/kafka.server.keystore.jks Schema.history.internal.consumer.ssl.keystore.location =test1234 schema.history.internal.consumer.ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks schema.history.internal.consumer.ssl.truststore.password=test1234 schema.history.internal.consumer.ssl.keystore.password=test1234

开云体育官方注册网址Debezium在将属性传递给Kafka客户端之前,会从属性名中去掉前缀。

更多细节请参阅Kafka文档Kafka生产者配置属性而且Kafka消费者配置属性

开云体育官方注册网址Debezium连接器直通数据库驱动程序配置属性开云体育电动老虎机

Debe开云体育官方注册网址zium连接器提供数据库驱动程序的直通配置。开云体育电动老虎机传递数据库属性以前缀开始开云体育电动老虎机司机。*.例如,连接器传递的属性为driver.foobar = false到JDBC URL。

的情况也是如此数据库模式历史客户端的传递属性开云体育电动老虎机, 开云体育官方注册网址Debezium在将前缀传递给数据库驱动程序之前将它们从属性中剥离。开云体育电动老虎机

监控

Debe开云体育官方注册网址zium Db2连接器除了Apache ZooKeeper、Apache Kafka和Kafka Connect提供的对JMX指标的内置支持之外,还提供了三种类型的指标。

  • 快照指标在执行快照时提供有关连接器操作的信息。

  • 流指标当连接器捕获变更和流化变更事件记录时,提供有关连接器操作的信息。

  • 架构历史度量提供关于连接器的模式历史记录的状态的信息。

开云体育官方注册网址Debezium监控文档提供了如何使用JMX公开这些指标的详细信息。

快照指标

MBean开云体育官方注册网址debezium.db2: type = connector-metrics上下文=快照,server =< db2.server.name >

快照度量不会公开,除非快照操作是活动的,或者自上次连接器启动以来发生了快照。

下表列出了可用的快照指标。

属性 类型 描述

字符串

连接器读取的最后一个快照事件。

自连接器读取并处理最近事件以来的毫秒数。

自上次启动或重置以来,此连接器已看到的事件总数。

已由连接器上配置的包含/排除列表筛选规则筛选的事件数。

string []

连接器捕获的表列表。

int

用于在快照和主Kafka Connect循环之间传递事件的队列长度。

int

用于在快照和主Kafka Connect循环之间传递事件的队列的空闲容量。

int

快照中包含的表的总数。

int

快照尚未复制的表数。

布尔

快照是否启动。

布尔

快照是否暂停。

布尔

快照是否中止。

布尔

快照是否完成。

快照到目前为止所花费的总秒数,即使没有完成。还包括快照暂停的时间。

快照暂停的总秒数。如果快照被暂停了多次,那么暂停的时间就会累积起来。

Map < String,长>

映射,其中包含为快照中的每个表扫描的行数。在处理期间将表增量地添加到Map中。每扫描10,000行并在完成一个表时更新一次。

队列的最大缓冲区,以字节为单位。该指标是可用的,如果max.queue.size.in.bytes设置为正的长值。

队列中记录的当前卷,以字节为单位。

在执行增量快照时,连接器还提供了以下额外的快照度量:

属性 类型 描述

字符串

当前快照块的标识符。

字符串

定义当前块的主键集的下界。

字符串

定义当前块的主键集的上界。

字符串

当前快照表的主键集的下界。

字符串

当前快照表的主键集的上限。

流指标

MBean开云体育官方注册网址debezium.db2: type = connector-metrics、上下文=流媒体服务器=< db2.server.name >

下表列出了可用的流媒体指标。

属性 类型 描述

字符串

连接器读取的最后一个流事件。

自连接器读取并处理最近事件以来的毫秒数。

自上次启动或度量重置以来,此连接器所看到的事件总数。

自上次启动或指标重置以来,此连接器所看到的创建事件的总数。

自上次启动或指标重置以来,此连接器所看到的更新事件总数。

自上次启动或指标重置以来,此连接器所看到的删除事件的总数。

已由连接器上配置的包含/排除列表筛选规则筛选的事件数。

string []

连接器捕获的表列表。

int

用于在streamer和主Kafka Connect循环之间传递事件的队列长度。

int

用于在streamer和主Kafka Connect循环之间传递事件的队列的空闲容量。

布尔

标志,该标志表示连接器当前是否连接到数据库服务器。开云体育电动老虎机

从最后一个更改事件的时间戳到连接器处理它之间的毫秒数。这些值将包含运行数据库服务器和连接器的机器上的时钟之间的任何差异。开云体育电动老虎机

提交的已处理事务的数量。

Map < String, String >

上次接收事件的坐标。

字符串

最后处理的事务的事务标识符。

队列的最大缓冲区,以字节为单位。该指标是可用的,如果max.queue.size.in.bytes设置为正的长值。

队列中记录的当前卷,以字节为单位。

架构历史度量

MBean开云体育官方注册网址debezium.db2: type = connector-metrics、上下文= schema-history服务器=< db2.server.name >

下表列出了可用的模式历史指标。

属性 类型 描述

字符串

之一停止恢复(从存储中恢复历史),运行描述数据库模式历史记录的状态。开云体育电动老虎机

恢复开始的时间(以epoch秒为单位)。

在恢复阶段读取的更改数。

在恢复和运行时应用的模式更改的总数。

自上次更改从历史存储区恢复以来所经过的毫秒数。

自应用最后一次更改以来所经过的毫秒数。

字符串

从历史存储中恢复的最后一次更改的字符串表示形式。

字符串

最后应用的更改的字符串表示形式。

管理

部署Debezium Db2连接器后,开云体育官方注册网址使用Debezium管理udf使用SQL命令控制Db2复制(ASN)。有些udf需要返回值,在这种情况下使用SQL价值语句来调用它们。对于其他udf,使用SQL调用声明。

表14。Debezium管理udf的描述开云体育官方注册网址
任务 命令和注意事项

启动ASN代理

值ASNCDC.ASNCDCSERVICES(“开始”、“asncdc”);

停止ASN代理

值ASNCDC.ASNCDCSERVICES(“停止”、“asncdc”);

检查ASN agent状态

值ASNCDC.ASNCDCSERVICES(“状态”,“asncdc”);

将表放入捕获模式

ASNCDC打电话。一个DDTABLE('MYSCHEMA', 'MYTABLE');

取代MYSCHEMA包含要放入捕获模式的表的模式的名称。同样,取代MYTABLE要放入捕获模式的表的名称。

从捕获模式中移除一个表

ASNCDC打电话。REMOVETABLE(“MYSCHEMA”、“MYTABLE”);

重新初始化ASN服务

值ASNCDC.ASNCDCSERVICES(“reinit”、“asncdc”);

在将表放入捕获模式或从捕获模式中删除表之后执行此操作。

模式演化

虽然Debezi开云体育官方注册网址um Db2连接器可以捕获模式更改,但要更新模式,您必须与数据库管理员协作,以确保连接器继续产生更改事件。开云体育电动老虎机这是Db2实现复制的方式所需要的。

对于处于捕获模式的每个表,Db2的复制特性将创建一个更改数据表,其中包含对源表的所有更改。但是,更改数据表模式是静态的。如果您在捕获模式下更新表的模式,那么您也必须更新其对应的更改数据表的模式。De开云体育官方注册网址bezium Db2连接器不能做到这一点。具有开云体育电动老虎机提升权限的数据库管理员必须更新处于捕获模式的表的模式。

在同一个表上有新的模式更新之前,完全执行一个模式更新过程是非常重要的。因此,建议在一个批处理中执行所有ddl,这样模式更新过程就只执行一次。

更新表架构通常有两个过程:

每种方法都有优点和缺点。

脱机模式更新

在执行脱机模式更新之前,停开云体育官方注册网址止Debezium Db2连接器。虽然这是更安全的模式更新过程,但对于具有高可用性需求的应用程序可能不可行。

先决条件
  • 处于捕获模式的一个或多个表需要更新模式。

过程
  1. 挂起更新数据库的应用程序。开云体育电动老虎机

  2. 等待Debezium连接器开云体育官方注册网址流化所有未流化的变更事件记录。

  3. 停止Debeziu开云体育官方注册网址m连接器。

  4. 将所有更改应用到源表模式。

  5. 在ASN注册表中,将更新模式的表标记为不活跃的

  6. 重新初始化ASN捕获服务

  7. 从捕获模式中删除旧模式的源表运行Debezium U开云体育官方注册网址DF从捕获模式中删除表

  8. 将具有新模式的源表添加到捕获模式by运行Debezium U开云体育官方注册网址DF将表添加到捕获模式

  9. 在ASN注册表中,将更新的源表标记为活跃的

  10. 重新初始化ASN捕获服务。

  11. 恢复更新数据库的应用程序。开云体育电动老虎机

  12. 重新启动Debezium开云体育官方注册网址连接器。

在线模式更新

在线模式更新不需要应用程序和数据处理停机。也就是说,在执行在线模式更新之前,不需要停止Debeziu开云体育官方注册网址m Db2连接器。此外,在线模式更新过程比离线模式更新过程更简单。

但是,当表处于捕获模式时,在更改列名之后,Db2复制特性将继续使用旧的列名。新的列名不会出现在Debezium更改事件中。开云体育官方注册网址必须重新启动连接器才能在更改事件中看到新的列名。

先决条件
  • 处于捕获模式的一个或多个表需要更新模式。

将列添加到表的末尾时
  1. 锁定要更改其架构的源表。

  2. 在ASN寄存器表中,将锁定的表标记为不活跃的

  3. 重新初始化ASN捕获服务。

  4. 将所有更改应用到源表的模式。

  5. 将所有更改应用到相应更改数据表的模式。

  6. 在ASN注册表中,将源表标记为活跃的

  7. 重新初始化ASN捕获服务。

  8. 可选的。重新启动连接器以查看更改事件中更新的列名。

将列添加到表中间时的过程
  1. 锁定要更改的源表。

  2. 在ASN寄存器表中,将锁定的表标记为不活跃的

  3. 重新初始化ASN捕获服务。

  4. 对于每个要更改的源表:

    1. 导出源表中的数据。

    2. 截断源表。

    3. 修改源表并添加列。

    4. 将导出的数据加载到更改后的源表中。

    5. 导出源表对应的更改数据表中的数据。

    6. 截断更改数据表。

    7. 修改更改数据表并添加列。

    8. 将导出的数据加载到已更改的更改数据表中。

  5. 在ASN注册表中,将表标记为不活跃的.这将旧的更改数据表标记为非活动的,这允许其中的数据保留,但不再更新。

  6. 重新初始化ASN捕获服务。

  7. 可选的。重新启动连接器以查看更改事件中更新的列名。