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

新记录状态提取

这种单一消息转换(SMT)仅支持SQL数据库连接器。开云体育电动老虎机有关MongoDB连接器,请参见MongoDB的文档相当于这个SMT

De开云体育官方注册网址bezium数据更改事件具有复杂的结构,可提供丰富的信息。传递Debezium变更事件的Kafka记录包含了所开云体育官方注册网址有这些信息。然而,Kafka生态系统的一部分可能希望Kafka记录提供字段名和值的扁平结构。为了提供这种记录,Debezium提供了开云体育官方注册网址ExtractNewRecordState单消息转换(SMT)。当消费者需要格式比包含Debezium更改事件的Kafka记录更简单的Kafka记录时,请配置此转换。开云体育官方注册网址

ExtractNewRecordState变换是Kafka连接SMT

改变事件结构

开云体育官方注册网址Debezium生成的数据更改事件具有复杂的结构。每个活动由三个部分组成:

  • 元数据,包括但不限于:

    • 进行更改的操作

    • 源信息,例如进行更改的数据库和表的名称开云体育电动老虎机

    • 进行更改的时间戳

    • 可选事务信息

  • 更改前的行数据

  • 修改后的行数据

例如,一个的结构更新更改事件看起来像这样:

{"op": "u", "source":{…}, " ts_ms " : "...", " 前”:{“field1”:“oldvalue1”、“field2”:“oldvalue2”},“后”:{“field1”:“newvalue1”、“field2”:“newvalue2}}

中提供了有关更改事件结构的更多详细信息每个连接器的文档

这种复杂的格式提供了关于系统中发生的更改的大部分信息。然而,其他连接器或Kafka生态系统的其他部分通常期望数据是这样的简单格式:

{"field1": "newvalue1", "field2": "newvalue2"}

要为使用者提供所需的Kafka记录格式,请配置ExtractNewRecordStateSMT。

行为

ExtractNewRecordStateSMT提取字段来自Kafka记录中的开云体育官方注册网址Debezium更改事件。SMT仅用它的更改事件替换原始的更改事件字段创建一个简单的Kafka记录。

您可以配置ExtractNewRecordStateSMT用于Debez开云体育官方注册网址ium连接器,或者用于消耗由Debezium连接器发出的消息的接收器连接器。配置的优势ExtractNewRecordState对于接收器连接器来说,存储在Apache Kafka中的记录包含了整个Debezium更改事件。开云体育官方注册网址将SMT应用于源连接器或接收器连接器的决定取决于您的特定用例。

您可以配置转换以执行以下任何操作:

  • 将变更事件的元数据添加到简化的Kafka记录中。默认行为是SMT不添加元数据。

  • 保存包含更改事件的Kafka记录删除流中的操作。默认的行为是SMT丢弃Kafka记录删除操作更改事件,因为大多数使用者还不能处理它们。

一个开云体育电动老虎机数据库删除操作导致Debezium生成两条K开云体育官方注册网址afka记录:

  • 包含以下内容的记录“人事处”:“d”,之前行数据和一些其他字段。

  • 与已删除行具有相同键且值为的墓碑记录.这个记录是Apache Kafka的一个标记。它表明日志压实可以删除具有此键的所有记录。

而不是删除包含之前行数据,可以配置ExtractNewRecordDataSMT要做以下一种:

  • 将记录保存在流中,并将其编辑为仅具有“价值”:“零”字段。

  • 将记录保存在流中,并对其进行编辑以使其具有价值属性中的键/值对之前字段中添加了“__deleted”:“真正的”条目。

类似地,不需要删除墓碑记录,您可以配置ExtractNewRecordDataSMT来保存流中的墓碑记录。

配置

配置Debezium开云体育官方注册网址ExtractNewRecordState通过将SMT配置细节添加到连接器的配置中,Kafka连接源连接器或接收器连接器中的SMT。若要获取默认行为,请在. properties文件,您将指定如下内容:

变换=打开……transforms.unwrap.type = i开云体育官方注册网址o.debezium.transforms.ExtractNewRecordState

至于任何Kafka Connect连接器配置,都可以设置变换=到多个逗号分隔的SMT别名,按照您想要Kafka Connect应用SMT的顺序。

以下. properties示例集几个ExtractNewRecordState选项:

变换=打开……transforms.unwrap.type = i开云体育官方注册网址o.debezium.transforms.ExtractNewRecordState transforms.unwrap.drop。来mbstones=false transforms.unwrap.delete.handling.mode=rewrite transforms.unwrap.add.fields=table,lsn
drop.tombstones = false

保存墓碑上的记录删除事件流中的操作。

delete.handling.mode =重写

删除操作,编辑卡夫卡记录通过扁平化价值在变化事件中的字段。的价值字段中直接包含的键/值对之前字段。SMT补充道__deleted并将其设置为真正的,例如:

“价值”:{“pk”:2,“可乐”:空,“__deleted”:“true”}
add.fields =表,lsn

属性的更改事件元数据表格而且lsn字段转换为简化的Kafka记录。

添加元数据

ExtractNewRecordStateSMT可以在简化的Kafka记录中添加原始的、更改的事件元数据。例如,您可能希望简化记录的头或值包含以下任何内容:

  • 进行更改的操作类型

  • 已更改的数据库或表的名称开云体育电动老虎机

  • 特定于连接器的字段,例如Postgres LSN字段

有关可用的更多信息,请参阅每个连接器的文档

要向简化的Kafka记录头添加元数据,请指定add.header选择。要向简化的Kafka记录的值添加元数据,请指定add.fields选择。每个选项都接受一个以逗号分隔的变更事件字段名列表。不要指定空格。当存在重复的字段名时,要为其中一个字段添加元数据,请指定结构体和字段。例如:

变换=打开……transforms.unwrap.type = i开云体育官方注册网址o.debezium.transforms.ExtractNewRecordState transforms.unwrap.add.fields = op,表,lsn、源。ts_ms transforms.unwrap.add。头= db transforms.unwrap.delete.handling.mode =重写

有了这样的配置,一个简化的Kafka记录将包含如下内容:

{…“__op”:“c”,“__table”:“MY_TABLE”、“__lsn”:“123456789”,“__source_ts_ms”:“123456789”,……}

此外,简化的Kafka记录将有一个__db头。

在简化的Kafka记录中,SMT用双下划线作为元数据字段名的前缀。指定结构时,SMT还在结构名和字段名之间插入下划线。

将元数据添加到简化的Kafka记录中删除操作时,还必须配置delete.handling.mode =重写

配置选项

属性指定的选项如下表所示ExtractNewRecordStateSMT。

财产

默认的

描述

真正的

开云体育官方注册网址Debezium为每一个生成一个墓碑记录删除操作。默认的行为就是这样ExtractNewRecordState从流中移除墓碑记录。若要在流中保存墓碑记录,请指定drop.tombstones = false

下降

开云体育官方注册网址Debezium为每个事件生成一个变更事件记录删除操作。默认的行为就是这样ExtractNewRecordState从流中移除这些记录。来保存卡夫卡的记录删除流中的操作,设置delete.handling.mode没有一个重写

指定没有一个将变更事件记录保存在流中。记录只包含“价值”:“零”

指定重写将更改事件记录保存在流中,并编辑该记录以具有价值属性中的键/值对之前字段,然后添加__deleted:真价值.这是指示记录已被删除的另一种方式。

当你指定重写的更新简化记录删除跟踪已删除记录所需要的可能只是操作。您可以考虑接受删除Debezium连接器创建的墓碑记录的默认行为。开云体育官方注册网址

若要使用行数据确定要将记录路由到的主题,请将此选项设置为字段属性。SMT将记录路由到名称与指定值匹配的主题字段属性。对于一个删除操作,将该选项设置为a之前字段属性。

例如,的配置route.by.field =目标将记录路由到名称为值的主题after.destination.默认行为是Debezium连接器将每个更改事件记录发送到一个主开云体育官方注册网址题,该主题的名称由数据库的名称和进行更改的表的名称组成。开云体育电动老虎机

如果您正在配置ExtractNewRecordState如果目标主题名称指定将使用简化的更改事件记录更新的数据库表的名称,则设置此选项可能有用。开云体育电动老虎机如果主题名称不适合您的用例,您可以进行配置route.by.field重新路由事件。

将该选项设置为一个以逗号分隔,不带空格的元数据字段列表,添加到简化的Kafka记录的值中。例如,当存在重复的字段名时,要为其中一个字段添加元数据,请指定结构体和字段source.ts_ms

当SMT将元数据字段添加到简化记录的值时,它会在每个元数据字段名称前加上双下划线。对于结构规范,SMT还在结构名和字段名之间插入下划线。

如果您指定的字段不在变更事件记录中,SMT仍然会将该字段添加到记录的值中。

将该选项设置为一个逗号分隔的元数据字段列表,不带空格,添加到简化Kafka记录的头部。例如,当存在重复的字段名时,要为其中一个字段添加元数据,请指定结构体和字段source.ts_ms

当SMT将元数据字段添加到简化记录的报头时,它会在每个元数据字段名称前加上双下划线。对于结构规范,SMT还在结构名和字段名之间插入下划线。

如果指定的字段不在变更事件记录中,SMT不会将该字段添加到报头中。