您正在查看过时的Debezium版本的文档。开云体育官方注册网址
如果您想查看本页最新的稳定版本,请前往在这里

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

开云体育官方注册网址Debezium的Db2连接器可以捕获Db2数据库表中的行级更改。开云体育电动老虎机该连接器受到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. 在连接器偏移量中记录快照的成功完成。

更改数据表

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

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

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

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

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

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

主题名称

默认情况下,Db2连接器将单个表上所有插入、更新和删除操作的更改事件写入单个Kafka主题。Kafka主题的名称格式如下:

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

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

属性指定的连接器的逻辑名称开云体育电动老虎机database.server.name连接器配置属性。

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

要配置Db2连接器向不同名称的Kafka主题发出更改事件,请参阅主题路由转换

架构更改主题

对于处于捕获模式的表,Debezium Db2连接器将模式更改的历史记录存储在数据开云体育官方注册网址库历史主题中。开云体育电动老虎机这个主题反映了一个内部连接器状态,您不应该使用它。如果应用程序需要跟踪模式更改,则有一个公共模式更改主题。模式更改主题的名称与连接器配置中指定的逻辑服务器名称相同。

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

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

模式更改主题的消息包含表模式的逻辑表示,例如:

{"schema":{…}, "payload": {"source": {"version": "1.5.4. "Final", "connector": "db2", "name": "db2", "ts_ms": 1588252618953, "snapshot": "true", "db": "testdb", "schema": "DB2INST1", "table": "CUSTOMERS", "change_lsn": null, "commit_lsn": "00000025:00000d98:00a2", "event_serial_no": null}, "d开云体育电动老虎机atabaseName": "testdb",(1)“schemaName”:“DB2INST1”,“ddl”:null,(2)“tableChanges”:((3){"type": "CREATE",(4)" id ": " \ " DB2INST1 \ \”,\“客户”,(5)"表":{(6)"defaultCharsetName": null, "primaryKeyColumnNames": [(7)"ID"], "columns": [(8){"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}]}}}}}}}}}}}}}}}}
表1。发送到模式更改主题的消息中的字段的描述
字段名 描述

1

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

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

2

ddl

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

3.

tableChanges

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

4

类型

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

  • 创建-表已创建

  • 改变-表格修改

  • 下降-删除表

5

id

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

6

表格

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

7

primaryKeyColumnNames

组成表主键的列列表。

8

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

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

{"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生成一个包含以下字段的事件:

  • 状态-开始结束

  • id唯一事务标识符的字符串表示

  • event_count(结束事件)——事务发出的事件总数

  • data_collections(结束事件)-对的数组data_collection而且event_count它提供了由来自给定数据集合的更改所发出的事件的数量

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

连接器将事务事件发出到开云体育电动老虎机database.server.name.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)…}},
表2。变更事件基本内容概述
字段名 描述

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}}
表3。更改事件键的描述
字段名 描述

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. "开云体育电动老虎机值”、“场”:“后”},{“类型”:“结构”、“字段”:[{“类型”:“弦”、“可选”:假的,“场”:“版本”},{“类型”:“弦”、“可选”:假的,“场”:“连接器”},{“类型”:“弦”、“可选”:假的,“场”:“name”},{“类型”:“int64”、“可选”:假的,“场”:“ts_ms”},{“类型”:“布尔”、“可选”:真的,“默认”:假的,“场”:“快照”},{“类型”:“弦”、“可选”:假的,“场”:“分贝”},{“类型”:“弦”、“可选”:假的,“场”:"schema"}, {"type": "string", "optional": false, "field": "table"}, {"type": "string", "optional": true, "field": "change_lsn"}, "optional": "string", "optional": "commit_lsn"},], "optional": false, "name": "io. debezum .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)“版本”:“1.5.4。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)}}
表4。的描述创建事件值字段
字段名 描述

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)“版本”:“1.5.4。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)}}
表5所示。的描述更新事件值字段
字段名 描述

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)“版本”:“1.5.4。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)}}
表6所示。的描述删除事件值字段
字段名 描述

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模式的名称。

表7所示。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配置属性设置为自适应,则连接器根据列的数据类型定义确定文字类型和语义类型。这确保了事件完全表示数据库中的值。开云体育电动老虎机

表8所示。映射时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

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

SMALLDATETIME

INT64

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

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

DATETIME2 (0)DATETIME2 (1)DATETIME2 (2)DATETIME2 (3)

INT64

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

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

DATETIME2 (4)DATETIME2 (5)DATETIME2 (6)

INT64

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

表示自纪元以来的微秒数,不包括时区信息。

DATETIME2 (7)

INT64

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

表示纪元后的纳秒数,不包括时区信息。

time.precision.mode =连接

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

表9所示。映射时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

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

SMALLDATETIME

INT64

org.apache.kafka.connect.data.Timestamp

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

DATETIME2

INT64

org.apache.kafka.connect.data.Timestamp

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

时间戳类型

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

运行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模式参数包含一个整数,表示给定十进制值的精度。

SMALLMONEY

字节

org.apache.kafka.connect.data.Decimal

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

字节

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”);
  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. 下载连接器的插件存档

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

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

  4. 获得Db2的JDBC驱动程序

  5. 将JDBC驱动程序JAR文件添加到带有Debezium Db2连接器JAR的目录中。开云体育官方注册网址

  6. 配置连接器并将配置添加到Kafka Connect集群中。

  7. 重新启动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)“开云体育电动老虎机数据库。使用r": "db2inst1",(5)“开云体育电动老虎机数据库。密码”:“密码!”(6)“开云体育电动老虎机数据库。dbname": "mydatabase",(7):开云体育电动老虎机“database.server.name fullfillment”,(8)“table.include。”:“MYSCHEMA列表。客户”,(9)“开云体育电动老虎机database.history.kafka.bootstrap。服务器”:“卡夫卡:9092”,(10)“开云体育电动老虎机database.history.kafka。主题:“dbhistory.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主题的主题名前缀。

一个可选的、以逗号分隔的正则表达式列表,它匹配您希望连接器捕获其更改的表的完全限定表标识符。没有包含在包含列表中的任何表都不会捕获其更改。每个标识符都是这样的schemaName的表.默认情况下,连接器捕获每个非系统表中的更改。不也定了吗table.exclude.list财产。

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

空字符串

一个可选的、以逗号分隔的正则表达式列表,它匹配要从更改事件值中排除的列的完全限定名称。列的完全限定名的格式为schemaName的表columnName.主键列总是包含在事件的键中,即使它们从值中被排除。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为schemaName的表columnName.在产生的更改事件记录中,指定列的值将被假名替换。

假名由应用指定的参数产生的散列值组成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

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为schemaName的表columnName.在更改事件记录中,如果这些列中的值长于指定的字符数,则将被截断长度属性名。您可以在单个配置中指定具有不同长度的多个属性。长度必须是正整数,例如,column.truncate.to.20.chars

N/A

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为schemaName的表columnName.在更改事件值中,指定表列中的值将被替换为长度星号数目()字符。您可以在单个配置中指定具有不同长度的多个属性。长度必须为正整数或零。当指定0时,连接器将用空字符串替换值。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与列的完全限定名匹配。列的完全限定名的格式为开云体育电动老虎机数据库名的表columnName,或开云体育电动老虎机数据库名schemaName的表columnName

对于每个指定的列,连接器将列的原始类型和原始长度作为参数添加到发出的更改记录中的相应字段模式中。以下添加的模式参数将传播原始类型名称和变宽类型的原始长度:

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

此属性对于适当调整接收器数据库中相应列的大小非常有用。开云体育电动老虎机

N/A

一个可选的、以逗号分隔的正则表达式列表,用于匹配某些列的特定于数据库的数据类型名称。开云体育电动老虎机完全限定数据类型名称的格式为开云体育电动老虎机数据库名的表typeName,或开云体育电动老虎机数据库名schemaName的表typeName

对于这些数据类型,连接器将参数添加到发出的更改记录中相应的字段模式。添加的参数指定列的原始类型和长度:

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

对于变宽类型,这些参数分别传播列的原始类型名和长度。此属性对于适当调整接收器数据库中相应列的大小非常有用。开云体育电动老虎机

看到Db2数据类型查看db2特定的数据类型名称列表。

空字符串

使用正则表达式匹配表列名的分号分隔的表列表。连接器将匹配列中的值映射到它发送给Kafka主题的更改事件记录中的关键字段。当一个表没有主键,或者当你想根据一个不是主键的字段来排序Kafka主题中的更改事件记录时,这是很有用的。

用分号分隔条目。在完全限定表名与其正则表达式之间插入冒号。格式为:

模式名表名: _regexp_;…

例如,

schemaA.table_a: regex_1; schemaB.table_b: regex_2; schemaC.table_c: regex_3

如果table_a有一个id列,regex_1^我匹配以。开头的任何列),连接器将值映射到table_aid列转换为连接器发送给Kafka的change事件中的关键字段。

高级连接器配置属性

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

财产 默认的 描述

最初的

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

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

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

repeatable_read

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

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

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

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

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

失败

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

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

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

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

1000

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

8192

阻塞队列的最大大小为正整数值。连接器将从数据库日志中读取的更改事件放入阻塞队列,然后再将它们写入Kafka。开云体育电动老虎机该队列可以为读取更改数据表提供反压力,例如,向Kafka写入记录的速度比应有的要慢,或者Kafka不可用。出现在队列中的事件不包括在连接器定期记录的偏移量中。的max.queue.size的值应始终大于max.batch.size连接器配置属性。

2048

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

0

阻塞队列最大大小(以字节为单位)的长值。默认情况下,该功能是禁用的,如果设置为正长值,则该功能将激活。

0

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

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

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

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

指定连接器向其发送心跳消息的主题名称的前缀。此主题名称的格式为< heartbeat.topics.prefix >。< server.name >

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

2000

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

10000

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

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

-1—连接器无限等待。

控制快照中包含哪些表行。此属性仅影响快照。它不会影响连接器从日志中读取的事件。在表单中指定以逗号分隔的全限定表名列表schemaName.tableName

对于您指定的每个表,还要指定另一个配置属性:snapshot.select.statement.overrides。SCHEMA_NAMETABLE_NAME.例如:snapshot.select.statement.overrides.customers.orders.将此属性设置为a选择语句,只获取快照中需要的行。当连接器执行快照时,它执行此操作选择语句从该表检索数据。

设置这些属性的一个可能用例是只能追加的大型表。您可以指定选择语句,用于设置从何处开始快照的特定点,或者如果前一个快照中断,则从何处恢复快照。

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

如果不是。

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

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

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

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

下表描述了开云体育电动老虎机database.history属性用于配置Debezium连接器。开云体育官方注册网址

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

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

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

One hundred.

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

4

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

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

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

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

安全默认值为

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

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

安全默认值为

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


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

开云体育电动老虎机database.history.producer.security。协议SSL databas开云体育电动老虎机e.history.producer.ssl.keystore.location = = / var /私人/ SSL / kafka.server.keystore。jks 开云体育电动老虎机database.history.producer.ssl.keystore。密码= test1234 datab开云体育电动老虎机ase.history.producer.ssl.truststore.location = / var /私人/ ssl / kafka.server.truststore。jks 开云体育电动老虎机database.history.producer.ssl.truststore。密码= test1234 datab开云体育电动老虎机ase.history.producer.ssl.key。密码= test1234 datab开云体育电动老虎机ase.history.consumer.security。协议SSL databas开云体育电动老虎机e.history.consumer.ssl.keystore.location = = / var /私人/ SSL / kafka.server.keystore。jks 开云体育电动老虎机database.history.consumer.ssl.keystore。密码= test1234 datab开云体育电动老虎机ase.history.consumer.ssl.truststore.location = / var /私人/ ssl / kafka.server.truststore。jks 开云体育电动老虎机database.history.consumer.ssl.truststore。密码= test1234 datab开云体育电动老虎机ase.history.consumer.ssl.key.password = test1234

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

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

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

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

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

监控

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

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

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

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

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

快照指标

MBean开云体育官方注册网址debezium.db2: type = connector-metrics上下文=快照,server =<开云体育电动老虎机 database.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、上下文=流媒体服务器=<开云体育电动老虎机 database.server.name >

属性 类型 描述

字符串

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

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

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

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

string []

连接器监视的表的列表。

int

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

int

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

布尔

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

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

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

Map < String, String >

上次接收事件的坐标。

字符串

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

队列的最大缓冲区,以字节为单位。

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

架构历史度量

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

属性 类型 描述

字符串

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

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

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

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

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

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

字符串

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

字符串

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

管理

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

表11所示。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. xref:连接器/ db2。重新初始化开云体育官方注册网址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. 可选的。重新启动连接器以查看更改事件中更新的列名。