开云体育官方注册网址用于Db2的Debezium连接器
此连接器处于孵化状态。确切的语义,配置选项和其他功能可能会在未来的版本中改变,根据我们收到的反馈。如果您遇到任何问题,请告诉我们。 |
开云体育官方注册网址Debezium的Db2连接器可以捕获Db2数据库表中的行级更改。开云体育电动老虎机该连接器受到SQL Server的Debezium实现的强烈启发,该实现使用基于SQL开云体育官方注册网址的轮询模型,将表置于“捕获模式”。当表处于捕获模式时,Debezium Db2连接器将为该表的每个行级更新生开云体育官方注册网址成一个更改事件并将其流式传输。
处于捕获模式的表有一个关联的变更数据表,由Db2创建。对于处于捕获模式的表的每次更改,Db2将关于该更改的数据添加到表的关联更改数据表中。更改数据表包含针对行的每个状态的条目。它还有用于删除的特殊条目。Debe开云体育官方注册网址zium Db2连接器从更改数据表读取更改事件,并将事件发送到Kafka主题。
当Debezium Db2连接器第开云体育官方注册网址一次连接到Db2数据库时,连接器将读取表的一致快照,连接器已为其配置以捕获更改。开云体育电动老虎机默认情况下,这是所有非系统表。连接器配置属性允许您指定将哪些表放入捕获模式,或将哪些表排除在捕获模式之外。
当快照完成时,连接器开始向处于捕获模式的表发出已提交更新的更改事件。默认情况下,特定表的更改事件会转到与表同名的Kafka主题。应用程序和服务使用来自这些主题的更改事件。
连接器使用抽象语法符号(ASN)库,这些库是Db2 LUW (Db2 for Linux、UNIX和Windows)的标准部分,您可以将其添加到Db2 zOS中。要使用ASN并因此使用该连接器,您必须拥有IBM InfoSphere Data Replication (IIDR)产品的许可证。但是,不需要安装IIDR。
Db2连接器已经在Db2/Linux 11.5.0.0中进行了测试。预计连接器也可以在Windows、AIX和zOS上工作。
概述
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连接器执行快照时,它会执行以下操作:
确定哪些表处于捕获模式,因此必须包含在快照中。默认情况下,所有非系统表都处于捕获模式。连接器配置属性,例如
table.blacklist
而且table.whitelist
允许您指定哪些表应该处于捕获模式。以捕获模式获取每个表上的锁。这确保在快照期间,这些表中不会发生模式更改。锁的级别由
snapshot.isolation.mode
连接器配置属性。读取服务器事务日志中最高的(最近的)LSN位置。
捕获处于捕获模式的所有表的模式。连接器将此信息保存在其内部数据库历史记录主题中。开云体育电动老虎机
可选,释放在步骤2中获得的锁。通常,这些锁只持有很短的时间。
在第3步读取的LSN位置,连接器扫描捕获模式表及其模式。扫描时,连接器:
确认表是在快照开始之前创建的。如果不是,快照将跳过该表。快照完成后,连接器开始发出更改事件,连接器将为快照期间创建的任何表生成更改事件。
产生一个读事件,用于捕获模式下的每个表中的每一行。所有读事件中包含相同的LSN位置,即步骤3中获取的LSN位置。
发出每个读事件到与表同名的Kafka主题。
在连接器偏移量中记录快照的成功完成。
更改数据表
在完成快照之后,当Debezium Db2连接器第一次启动时,连接器开云体育官方注册网址为处于捕获模式的每个源表标识更改数据表。连接器对每个更改数据表执行以下操作:
读取更改在最后存储的最高LSN和当前最高LSN之间创建的事件。
根据每个事件的提交LSN和更改LSN对更改事件进行排序。这确保连接器按照发生表更改的顺序发出更改事件。
将提交和更改LSNs作为偏移量传递给Kafka Connect。
存储连接器传递给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.2.5. "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 |
|
标识包含更改的数据库和模式。开云体育电动老虎机 |
2 |
|
总是 |
3. |
|
包含DDL命令生成的模式更改的一个或多个项的数组。 |
4 |
|
描述变化的类型。取值为:
|
5 |
|
创建、修改或删除的表的完整标识符。 |
6 |
|
表示应用更改后的表元数据。 |
7 |
|
组成表主键的列列表。 |
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)...}},
项 | 字段名 | 描述 |
---|---|---|
1 |
|
第一个 |
2 |
|
第一个 |
3. |
|
第二个 |
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}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
密钥的模式部分指定了一个Kafka Connect模式,该模式描述了密钥中的内容 |
2 |
|
属性中期望的每个字段 |
3. |
|
指示事件键是否必须在其中包含值 |
4 |
|
定义键的有效负载结构的模式的名称。此模式描述已更改表的主键的结构。关键模式名具有该格式connector-name.开云体育电动老虎机数据库名称.表名.
|
5 |
|
包含为其生成此更改事件的行的键。在本例中,键包含一个单键 |
更改事件值
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.2.5。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)}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
值的模式,它描述值的有效负载的结构。连接器为特定表生成的每个更改事件中,更改事件的值模式都是相同的。 |
2 |
|
在 |
3. |
|
|
4 |
|
|
5 |
|
该值为实际数据。这是变更事件提供的信息。 |
6 |
|
可选字段,指定事件发生之前行的状态。当 |
7 |
|
可选字段,指定事件发生后行的状态。在本例中, |
8 |
|
描述事件的源元数据的必填字段。的
|
9 |
|
返回string,描述导致连接器产生事件的操作类型。在这个例子中,
|
10 |
|
可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。 |
更新事件
样例中更新的更改事件的值客户
表的模式与创建事件。同样,更新事件值的有效负载具有相同的结构。事件值有效负载中包含不同的值更新事件。中的更新中连接器生成的事件中的更改事件值的示例客户
表:
{"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.2.5。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)}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
可选字段,指定事件发生之前行的状态。在一个更新事件值,则 |
2 |
|
可选字段,指定事件发生后行的状态。你可以比较 |
3. |
|
描述事件的源元数据的必填字段。的
|
4 |
|
返回string,描述操作类型。在一个更新事件值,则 |
5 |
|
可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。 |
更新一行的主键/唯一键的列将更改该行键的值。当一个键改变时,Debezium输出开云体育官方注册网址三个事件: |
删除事件
的值删除改变事件有相同之处模式
部分为创建而且更新同一表的事件。事件值有效载荷
在一个删除事件。客户
表是这样的:
{"schema":{…},}, "payload": {"before": {(1)“ID”:1005年,“FIRST_NAME”:“约翰”,“LAST_NAME”:“母鹿”、“电子邮件”:“noreply@example.org”},“后”:空,(2)“源”:{(3)“版本”:“1.2.5。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)}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
可选字段,指定事件发生之前行的状态。在一个删除事件值,则 |
2 |
|
可选字段,指定事件发生后行的状态。在一个删除事件值,则 |
3. |
|
描述事件的源元数据的必填字段。在一个删除事件值,则
|
4 |
|
返回string,描述操作类型。的 |
5 |
|
可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。 |
一个删除更改事件记录为使用者提供了处理删除该行所需的信息。包含旧值是因为一些使用者可能需要它们来正确处理删除。
Db2连接器事件设计用于处理Kafka对数压缩.日志压缩允许删除一些较旧的消息,只要每个键至少保留最近的消息。这让Kafka回收存储空间,同时确保主题包含一个完整的数据集,并可用于重新加载基于键的状态。
删除一行时,删除event值仍然适用于日志压缩,因为Kafka可以删除所有具有相同键的早期消息。然而,Kafka要删除所有具有相同键的消息,消息值必须为零
.为了实现这一点,在Debezium的Db2连接器发出开云体育官方注册网址删除事件时,连接器发出一个特殊的墓碑事件,该事件具有相同的键,但具有零
价值。
数据类型映射
中描述了Db2的数据类型Db2 SQL数据类型.
Db2连接器用事件表示行更改,事件的结构类似于行所在的表。该事件为每个列值包含一个字段。该值在事件中如何表示取决于列的Db2数据类型。本节描述这些映射。
基本类型
下表描述了连接器如何将每个Db2数据类型映射到文字类型和一个语义类型在事件字段中。
文字类型描述了如何使用Kafka Connect模式类型来表示值:
INT8
,INT16
,INT32
,INT64
,FLOAT32
,FLOAT64
,布尔
,字符串
,字节
,数组
,地图
,结构体
.语义类型描述了Kafka Connect模式如何捕获意义该字段使用Kafka Connect模式的名称。
Db2数据类型 | 文字类型(模式类型) | 语义类型(模式名) | 笔记 |
---|---|---|---|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
|
没有时区信息的时间戳字符串表示形式 |
|
|
|
|
|
|
|
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
|
没有时区信息的时间字符串表示形式 |
|
|
|
没有时区信息的时间戳字符串表示形式 |
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
|
XML文档的字符串表示形式 |
如果存在,列的默认值将被传播到相应字段的Kafka Connect模式。更改事件包含字段的默认值,除非给出了显式的列值。因此,很少需要从模式中获取默认值。传递默认值有助于满足兼容性规则使用Avro作为序列化格式以及Confluent模式注册中心。
时间类型
除了Db2之外DATETIMEOFFSET
类型的值,其中包含时区信息,时态类型的映射方式取决于time.precision.mode
连接器配置属性。下面几节描述这些映射:
time.precision.mode =自适应
当time.precision.mode
配置属性设置为自适应
,则连接器根据列的数据类型定义确定文字类型和语义类型。这确保了事件完全表示数据库中的值。开云体育电动老虎机
Db2数据类型 | 文字类型(模式类型) | 语义类型(模式名) | 笔记 |
---|---|---|---|
|
|
|
表示自纪元以来的天数。 |
|
|
|
表示午夜过后的毫秒数,不包括时区信息。 |
|
|
|
表示午夜过后的微秒数,不包括时区信息。 |
|
|
|
表示午夜过后的纳秒数,不包括时区信息。 |
|
|
|
表示从纪元开始的毫秒数,不包括时区信息。 |
|
|
|
表示从纪元开始的毫秒数,不包括时区信息。 |
|
|
|
表示从纪元开始的毫秒数,不包括时区信息。 |
|
|
|
表示自纪元以来的微秒数,不包括时区信息。 |
|
|
|
表示纪元后的纳秒数,不包括时区信息。 |
time.precision.mode =连接
当time.precision.mode
配置属性设置为连接
,连接器使用Kafka Connect逻辑类型。当消费者只能处理内置的Kafka Connect逻辑类型而不能处理可变精度的时间值时,这可能很有用。但是,由于Db2支持十分之一微秒的精度,因此使用连接器生成的事件连接
时间精度导致精度的损失当数据库列具有开云体育电动老虎机分数秒精度大于3的值。
Db2数据类型 | 文字类型(模式类型) | 语义类型(模式名) | 笔记 |
---|---|---|---|
|
|
|
表示自纪元以来的天数。 |
|
|
|
表示从午夜开始的毫秒数,不包括时区信息。Db2允许 |
|
|
|
表示从纪元开始的毫秒数,不包括时区信息。 |
|
|
|
表示从纪元开始的毫秒数,不包括时区信息。 |
|
|
|
表示从纪元开始的毫秒数,不包括时区信息。Db2允许 |
时间戳类型
的DATETIME
,SMALLDATETIME
而且DATETIME2
类型表示不包含时区信息的时间戳。这些列将转换为基于UTC的等效Kafka Connect值。例如,DATETIME2
取值“2018-06-20 15:13:16.945104”由io.开云体育官方注册网址debezium.time.MicroTimestamp
值为“1529507596945104”。
运行Kafka Connect和Debezium的JVM的时区不会影响这种转换。开云体育官方注册网址
十进制类型
Db2数据类型 | 文字类型(模式类型) | 语义类型(模式名) | 笔记 |
---|---|---|---|
|
|
|
的 |
|
|
|
的 |
|
|
|
的 |
|
|
|
的 |
设置
在运开云体育电动老虎机行Debezium Db2连接器捕获提交到Db2数据库的更改之前,数据库管理员必须将表设置为捕获模式。开云体育官方注册网址为了使表进入捕获模式,Debezium提供了一组用户定义函数(ud开云体育官方注册网址f)。这里的过程展示了如何安装和运行这些管理udf。或者,您也可以运行Db2控制命令将表置于捕获模式。
本过程假设您以db2instl
user,这是使用Db2 docker容器映像时的默认实例和用户名。
在运行Db2的机器上,内容在
开云体育官方注册网址debezium-connector-db2 / src /测试/码头工人/ db2-cdc-docker
可在$ HOME / asncdctools / src
目录中。
方法在Db2服务器主机上开云体育官方注册网址编译Debezium管理udf
bldrtn
Db2提供的命令:cd $ HOME / asncdctools / src
。/ bldrtn asncdc
如果数据库尚未运行,开云体育电动老虎机则启动数据库。取代
DB_NAME
您希望Debezium连接到的数据库的名称开云体育电动老虎机。开云体育官方注册网址db2 start db DB_NAME
确保JDBC可以读取Db2元数据目录:
cd $ HOME / sqllib / bnd
Db2绑定db2schema。BND正在阻塞所有授予公共sqlerror继续
确保数据库最近进行了备份。开云体育电动老虎机ASN代理必须有一个最近的起始点来读取。如果您需要执行备份,请运行以下命令,这些命令将对数据进行修剪,以使只有最新版本可用。如果不需要保留数据的旧版本,请指定
dev /空
用于备份位置。备份数据库。开云体育电动老虎机取代
DB_NAME
而且BACK_UP_LOCATION
适当的值:db2 backup db DB_NAME到BACK_UP_LOCATION
重新启动数据库:开云体育电动老虎机
db2 restart db DB_NAME
连接到数据库以安装Debezi开云体育电动老虎机um管理udf。开云体育官方注册网址假设您以
db2instl
用户,因此udf应该安装在db2inst1
用户。db2连接到DB_NAME
复制Debeziu开云体育官方注册网址m管理udf并为它们设置权限:
cp $HOME/asncdctools/src/asncdc $HOME/sqllib/function
chmod 777 $HOME/sqllib/函数
启用启动和停止ASN捕开云体育官方注册网址获代理的Debezium UDF:
db2 -tvmf $HOME/asncdctools/src/asncdc_UDF.sql
创建ASN控制表:
$ db2 -tvmf $HOME/asncdctools/src/asncdctables.sql
启用Debezium 开云体育官方注册网址UDF将表添加到捕获模式并从捕获模式中删除表:
$ db2 -tvmf $HOME/asncdctools/src/asncdcaddremove.sql
在设置Db2服务器之后,使用udf使用SQL命令控制Db2复制(ASN)。有些udf需要返回值,在这种情况下使用SQL
价值
语句来调用它们。对于其他udf,使用SQL调用
声明。启动ASN agent:
值ASNCDC.ASNCDCSERVICES(“开始”、“asncdc”);
将表放入捕获模式。为希望放入捕获的每个表调用以下语句。取代
MYSCHEMA
包含要放入捕获模式的表的模式的名称。同样,取代MYTABLE
输入要进入捕获模式的表的名称:ASNCDC打电话。一个DDTABLE('MYSCHEMA', 'MYTABLE');
重新初始化ASN服务:
值ASNCDC.ASNCDCSERVICES(“reinit”、“asncdc”);
部署
下载连接器的插件存档.
将JAR文件解压缩到Kafka Connect环境中。
将包含JAR文件的目录添加到卡夫卡连接的
plugin.path
.获得Db2的JDBC驱动程序.
将JDBC驱动程序JAR文件添加到带有Debezium Db2连接器JAR的目录中。开云体育官方注册网址
重新启动Kafka Connect进程以获取新的JAR文件。
如果使用不可变容器,请参见开云体育官方注册网址Debezium的容器图像对于Zookeeper, Kafka和Kafka Connect已经安装好并准备运行的Db2连接器。你也可以在Kub开云体育官方注册网址ernetes和OpenShift上运行Debezium.
连接器配置示例
下面是一个Db2连接器的配置示例,该连接器连接到端口50000(192.168.99.100)上的Db2服务器,其逻辑名称为fullfillment
.一般情况下,您可以在开云体育官方注册网址. json
文件中使用连接器可用的配置属性。
您可以选择为模式和表的一个子集生成事件。可选地,忽略、屏蔽或截断敏感、过大或不需要的列。
{"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):开云体育电动老虎机“database.server.name fullfillment”,(8)”表。白名单”:“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语句开云体育电动老虎机的数据库历史主题的名称。此主题仅供内部使用,消费者不应使用。 |
看到连接器属性的完整列表你可以在这些构型中指定。
您可以使用帖子
命令到正在运行的Kafka Connect服务。该服务记录配置并启动一个连接到Db2数据库的连接器任务,以捕获模式为表读取更改数据表,并将更改事件记录流式传输到Kafka主题。开云体育电动老虎机
添加连接器配置
要开始运行Db2连接器,需要创建一个连接器配置,并将该配置添加到Kafka Connect集群中。
的Db2复制是否启用了为处于捕获模式的表公开更改数据
安装Db2连接器。
为Db2连接器创建一个配置。
使用Kafka连接REST API将该连接器配置添加到Kafka Connect集群中。
当连接器启动时,它将执行一致性快照配置连接器为其捕获更改开云体育电动老虎机的Db2数据库表。然后连接器开始为行级操作生成数据更改事件,并将更改事件记录流式传输到Kafka主题。
连接器属性
Debe开云体育官方注册网址zium Db2连接器具有许多配置属性,您可以使用这些属性为应用程序实现正确的连接器行为。许多属性都有默认值。属性信息组织如下:
以下配置属性为要求除非有默认值可用。
财产 | 默认的 | 描述 |
---|---|---|
连接器的唯一名称。尝试使用相同的名称再次注册将失败。所有Kafka Connect连接器都需要这个属性。 |
||
连接器的Java类的名称。始终使用值 |
||
|
应该为此连接器创建的最大任务数。Db2连接器总是使用单个任务,因此不使用这个值,所以默认值总是可以接受的。 |
|
Db2数据库服务器的IP地址或主机名。开云体育电动老虎机 |
||
|
Db2数据库服务器的整型端口号。开云体育电动老虎机 |
|
连接Db2数据库服务器的Db2数开云体育电动老虎机据库用户名。 |
||
连接到Db2数据库服务器时使用的密码。开云体育电动老虎机 |
||
用于传输更改的Db2数据库的名称开云体育电动老虎机 |
||
逻辑名称,用于标识特定Db2数据库服务器并为其提供名称空间,Debezium正在为该服务器捕获更改。开云体育官方注册网址开云体育电动老虎机在数据库服务器逻辑名中只能使用字母数字字符和下划线。开云体育电动老虎机逻辑名在所有其他连接器中应该是唯一的,因为它被用作从该连接器接收记录的所有Kafka主题的主题名前缀。 |
||
连接器存储数据库模式历史的Kafka主题的全称。开云体育电动老虎机 |
||
一个主机/端口对列表,连接器使用它来建立到Kafka集群的初始连接。此连接用于检索以前由连接器存储的数据库模式历史,并用于写入从源数据库读取的每个开云体育电动老虎机DDL语句。每一对都应该指向Debezium Kafka Connect进程使用的相同的Kafka集群。开云体育官方注册网址 |
||
一个可选的、以逗号分隔的正则表达式列表,它匹配您希望连接器捕获其更改的表的完全限定表标识符。没有包含在包含列表中的任何表都不会捕获其更改。每个标识符都是这样的schemaName.的表.默认情况下,连接器捕获每个非系统表中的更改。不也定了吗 |
||
一个可选的、以逗号分隔的正则表达式列表,用于匹配您不希望连接器捕获其更改的表的完全限定表标识符。连接器捕获未包含在排除列表中的每个非系统表中的更改。每个标识符都是这样的schemaName.的表.不也定了吗 |
||
空字符串 |
一个可选的、以逗号分隔的正则表达式列表,它匹配要从更改事件值中排除的列的完全限定名称。列的完全限定名的格式为schemaName.的表.columnName.主键列总是包含在事件的键中,即使它们从值中被排除。 |
|
N/A |
一个可选的、以逗号分隔的正则表达式列表,它匹配基于字符的列的完全限定名,这些列的值应该是更改事件值中的假名。方法获得的散列值组成的字段值 |
|
|
时间、日期和时间戳可以用不同的精度表示: |
|
|
属性之后是否生成墓碑事件删除事件。 |
|
|
布尔值,指定连接器是否应该将数据库模式中的更改发布到与数据库服务器ID同名的Kafka主题。开云体育电动老虎机每个模式更改都用一个包含数据库名称的键和一个描述模式更新的JSON结构值来记录。开云体育电动老虎机这与连接器内部记录数据库历史的方式无关。开云体育电动老虎机 |
|
N/A |
一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为schemaName.的表.columnName.在更改事件记录中,如果这些列中的值长于指定的字符数,则将被截断长度属性名。您可以在单个配置中指定具有不同长度的多个属性。长度必须是正整数,例如, |
|
N/A |
一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为schemaName.的表.columnName.在更改事件值中,指定表列中的值将被替换为长度星号数目( |
|
N/A |
一个可选的、以逗号分隔的正则表达式列表,它与列的完全限定名匹配。列的完全限定名的格式为开云体育电动老虎机数据库名.的表.columnName,或开云体育电动老虎机数据库名.schemaName.的表.columnName. |
|
N/A |
一个可选的、以逗号分隔的正则表达式列表,用于匹配某些列的特定于数据库的数据类型名称。开云体育电动老虎机完全限定数据类型名称的格式为开云体育电动老虎机数据库名.的表.typeName,或开云体育电动老虎机数据库名.schemaName.的表.typeName. |
以下先进的配置属性具有在大多数情况下都适用的默认值,因此很少需要在连接器的配置中指定。
财产 | 默认的 | 描述 |
---|---|---|
|
指定连接器启动时执行快照的条件: |
|
|
在快照期间,控制事务隔离级别以及连接器锁定处于捕获模式的表的时间。可能取值为: |
|
|
指定连接器在处理事件期间如何处理异常。可能取值为: |
|
|
正整数值,指定连接器在开始处理一批事件之前等待新更改事件出现的毫秒数。缺省值为1000毫秒,即1秒。 |
|
|
阻塞队列的最大大小为正整数值。连接器将从数据库日志中读取的更改事件放入阻塞队列,然后再将它们写入Kafka。开云体育电动老虎机该队列可以为读取更改数据表提供反压力,例如,向Kafka写入记录的速度比应有的要慢,或者Kafka不可用。出现在队列中的事件不包括在连接器定期记录的偏移量中。的 |
|
|
正整数值,指定连接器处理的每批事件的最大大小。 |
|
|
控制连接器向Kafka主题发送心跳消息的频率。默认行为是连接器不发送心跳消息。 |
|
|
指定连接器向其发送心跳消息的主题名称的前缀。此主题名称的格式为 |
|
在连接器启动时执行快照之前,连接器应等待的毫秒间隔。如果在集群中启动多个连接器,此属性有助于避免快照中断,因为快照中断可能导致连接器的重新平衡。 |
||
|
在快照期间,连接器以行为单位读取表内容。此属性指定批处理中的最大行数。 |
|
|
正整数值,指定在执行快照时等待获得表锁的最大时间(以毫秒为单位)。如果连接器在此间隔内无法获取表锁,则快照失败。连接器如何执行快照提供细节。其他可能的设置有: |
|
控制快照中包含哪些表行。此属性仅影响快照。它不会影响连接器从日志中读取的事件。在表单中指定以逗号分隔的全限定表名列表schemaName.tableName. |
||
|
指示是否对字段名进行清除以遵守Avro命名要求. |
|
|
确定连接器是否生成具有事务边界的事件,并使用事务元数据丰富更改事件信封。指定 |
连接器还支持直通它在创建Kafka生产者和消费者时使用的配置属性:
属性开头的所有连接器配置属性
开云体育电动老虎机database.history.producer。
在创建写入数据库历史主题的Kafka生成器时使用前缀(不带前缀)。开云体育电动老虎机属性开头的所有连接器配置属性
开云体育电动老虎机database.history.consumer。
在创建Kafka消费者时使用(没有前缀),当连接器启动时读取数据库历史。开云体育电动老虎机
例如,下面的连接器配置属性安全连接到Kafka代理:
开云体育电动老虎机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
此外,连接器传递以开云体育电动老虎机数据库。
到JDBC URL,例如,开云体育电动老虎机database.applicationName 开云体育官方注册网址= debezium
.
监控
除了Zo开云体育官方注册网址okeeper、Kafka和Kafka Connect提供的对JMX指标的内置支持外,Debezium Db2连接器还提供了三种类型的指标。
开云体育官方注册网址Debezium监控文档提供了如何使用JMX公开这些指标的详细信息。
快照指标
的MBean是开云体育官方注册网址debezium.db2: type = connector-metrics上下文=快照,server =<开云体育电动老虎机 database.server.name >
.
属性 | 类型 | 描述 |
---|---|---|
|
|
连接器读取的最后一个快照事件。 |
|
|
自连接器读取并处理最近事件以来的毫秒数。 |
|
|
自上次启动或重置以来,此连接器已看到的事件总数。 |
|
|
连接器上已配置白名单或黑名单过滤规则过滤的事件个数。 |
|
|
连接器监视的表的列表。 |
|
|
用于在快照和主Kafka Connect循环之间传递事件的队列长度。 |
|
|
用于在快照和主Kafka Connect循环之间传递事件的队列的空闲容量。 |
|
|
快照中包含的表的总数。 |
|
|
快照尚未复制的表数。 |
|
|
快照是否启动。 |
|
|
快照是否中止。 |
|
|
快照是否完成。 |
|
|
快照到目前为止所花费的总秒数,即使没有完成。 |
|
|
映射,其中包含为快照中的每个表扫描的行数。在处理期间将表增量地添加到Map中。每扫描10,000行并在完成一个表时更新一次。 |
流指标
的MBean是开云体育官方注册网址debezium.db2: type = connector-metrics、上下文=流媒体服务器=<开云体育电动老虎机 database.server.name >
.
属性 | 类型 | 描述 |
---|---|---|
|
|
连接器读取的最后一个流事件。 |
|
|
自连接器读取并处理最近事件以来的毫秒数。 |
|
|
自上次启动或重置以来,此连接器已看到的事件总数。 |
|
|
连接器上已配置白名单或黑名单过滤规则过滤的事件个数。 |
|
|
连接器监视的表的列表。 |
|
|
用于在streamer和主Kafka Connect循环之间传递事件的队列长度。 |
|
|
用于在streamer和主Kafka Connect循环之间传递事件的队列的空闲容量。 |
|
|
标志,该标志表示连接器当前是否连接到数据库服务器。开云体育电动老虎机 |
|
|
从最后一个更改事件的时间戳到连接器处理它之间的毫秒数。这些值将包含运行数据库服务器和连接器的机器上的时钟之间的任何差异。开云体育电动老虎机 |
|
|
提交的已处理事务的数量。 |
|
|
上次接收事件的坐标。 |
|
|
最后处理的事务的事务标识符。 |
架构历史度量
的MBean是开云体育官方注册网址debezium.db2: type = connector-metrics、上下文= schema-history服务器=<开云体育电动老虎机 database.server.name >
.
属性 | 类型 | 描述 |
---|---|---|
|
|
之一 |
|
|
恢复开始的时间(以epoch秒为单位)。 |
|
|
在恢复阶段读取的更改数。 |
|
|
在恢复和运行时应用的模式更改的总数。 |
|
|
自上次更改从历史存储区恢复以来所经过的毫秒数。 |
|
|
自应用最后一次更改以来所经过的毫秒数。 |
|
|
从历史存储中恢复的最后一次更改的字符串表示形式。 |
|
|
最后应用的更改的字符串表示形式。 |
管理
部署Debezium Db2连接器后,开云体育官方注册网址使用Debezium管理udf使用SQL命令控制Db2复制(ASN)。有些udf需要返回值,在这种情况下使用SQL价值
语句来调用它们。对于其他udf,使用SQL调用
声明。
任务 | 命令 | 笔记 |
---|---|---|
|
||
|
||
|
||
|
取代 |
|
|
||
|
在将表放入捕获模式或从捕获模式中删除表之后执行此操作。 |
模式演化
虽然Debezi开云体育官方注册网址um Db2连接器可以捕获模式更改,但要更新模式,您必须与数据库管理员协作,以确保连接器继续产生更改事件。开云体育电动老虎机这是Db2实现复制的方式所需要的。
对于处于捕获模式的每个表,Db2的复制特性将创建一个更改数据表,其中包含对源表的所有更改。但是,更改数据表模式是静态的。如果您在捕获模式下更新表的模式,那么您也必须更新其对应的更改数据表的模式。De开云体育官方注册网址bezium Db2连接器不能做到这一点。具有开云体育电动老虎机提升权限的数据库管理员必须更新处于捕获模式的表的模式。
在同一个表上有新的模式更新之前,完全执行一个模式更新过程是非常重要的。因此,建议在一个批处理中执行所有ddl,这样模式更新过程就只执行一次。 |
更新表架构通常有两个过程:
每种方法都有优点和缺点。
脱机模式更新
在执行脱机模式更新之前,停开云体育官方注册网址止Debezium Db2连接器。虽然这是更安全的模式更新过程,但对于具有高可用性需求的应用程序可能不可行。
处于捕获模式的一个或多个表需要更新模式。
挂起更新数据库的应用程序。开云体育电动老虎机
等待Debezium连接器开云体育官方注册网址流化所有未流化的变更事件记录。
停止Debeziu开云体育官方注册网址m连接器。
将所有更改应用到源表模式。
在ASN注册表中,将更新模式的表标记为
不活跃的
.xref:连接器/ db2。重新初始化开云体育官方注册网址ASN捕获服务。
从捕获模式中删除旧模式的源表运行Debezium U开云体育官方注册网址DF从捕获模式中删除表.
将具有新模式的源表添加到捕获模式by运行Debezium U开云体育官方注册网址DF将表添加到捕获模式.
在ASN注册表中,将更新的源表标记为
活跃的
.恢复更新数据库的应用程序。开云体育电动老虎机
重新启动Debezium开云体育官方注册网址连接器。
在线模式更新
在线模式更新不需要应用程序和数据处理停机。也就是说,在执行在线模式更新之前,不需要停止Debeziu开云体育官方注册网址m Db2连接器。此外,在线模式更新过程比离线模式更新过程更简单。
但是,当表处于捕获模式时,在更改列名之后,Db2复制特性将继续使用旧的列名。新的列名不会出现在Debezium更改事件中。开云体育官方注册网址必须重新启动连接器才能在更改事件中看到新的列名。
处于捕获模式的一个或多个表需要更新模式。
锁定要更改其架构的源表。
在ASN寄存器表中,将锁定的表标记为
不活跃的
.将所有更改应用到源表的模式。
将所有更改应用到相应更改数据表的模式。
在ASN注册表中,将源表标记为
活跃的
.可选的。重新启动连接器以查看更改事件中更新的列名。
锁定要更改的源表。
在ASN寄存器表中,将锁定的表标记为
不活跃的
.对于每个要更改的源表:
导出源表中的数据。
截断源表。
修改源表并添加列。
将导出的数据加载到更改后的源表中。
导出源表对应的更改数据表中的数据。
截断更改数据表。
修改更改数据表并添加列。
将导出的数据加载到已更改的更改数据表中。
在ASN注册表中,将表标记为
不活跃的
.这将旧的更改数据表标记为非活动的,这允许其中的数据保留,但不再更新。可选的。重新启动连接器以查看更改事件中更新的列名。