主题的路由

每个卡夫卡记录包含一个数据更改事件有一个默认的目的地的话题。如果你需要,你可以重新输入记录前主题指定记录到达卡夫卡连接转换器。为此,Debezium提开云体育官方注册网址供路由单消息转换(SMT)的主题。配置这个变换Debezium连接器卡夫卡的连接配置。开云体育官方注册网址配置选项使您能够指定以下:

  • 重新输入的表达式识别记录

  • 的表达式解析为目的地的话题

  • 如何确保一个唯一键的记录被路由到目的地的话题吗

它是由你来确保转换配置提供你想要的行为。开云体育官方注册网址Debezium不验证您的配置的行为结果的转换。

路由转换的话题卡夫卡连接贴片

用例

Debezium连接器发送的默认行为是每个更改事件记录到一个话开云体育官方注册网址题,他的名字叫的名称由数据库和表的名称的改变。开云体育电动老虎机换句话说,一个主题为一个物理表接收记录。当你想要一个主题来接收记录超过一个物理表,您必须配置Debezium连接器,重新路由记录到这个话题。开云体育官方注册网址

逻辑表

一个逻辑表是一种常见的用例路由记录多个物理表的一个主题。在一个逻辑表,有多个物理表都有相同的模式。例如,分片表有相同的模式。一个逻辑表可能由两个或两个以上的分片表:db_shard1.my_tabledb_shard2.my_table。表在不同的碎片和身体不同的但他们联合起来,组成一个逻辑表。你可以重新改变事件纪录表的同一主题的碎片。

PostgreSQL分区表

当Debezium开云体育官方注册网址 PostgreSQL连接器捕获一个分区表的变化,默认行为是改变事件记录为每个分区路由到一个不同的主题。排放记录从所有分区到一个主题,配置主题路由SMT。因为分区表中的每个关键是保证是独一无二的,配置key.enforce.uniqueness = false所以SMT不添加一个关键字段,以确保独特的钥匙。添加一个关键字段的默认行为。

例子

路由更改事件记录多个物理表相同的主题,配置路由转换话题的卡夫卡Debezium连接器的连接配置。开云体育官方注册网址主题的配置路由SMT需要您指定正则表达式决定:

  • 表的路由记录。这些表都必须有相同的模式。

  • 目的地主题名称。

连接器配置在下面的示例主题路由SMT设置几个选项:

变换=重新路由transforms.Reroute.type = io.debezium.t开云体育官方注册网址ransforms.ByLogicalTableRouter transforms.Reroute.topic.regex = (. *) customers_shard (. *) transforms.Reroute.topic.replacement customers_all_shards = 1美元
topic.regex

指定正则表达式的转换适用于每个更改事件记录,以确定是否应该被路由到一个特定的主题。

在这个例子中,正则表达式,(. *)customers_shard (. *)匹配记录的名字包括更改表customers_shard字符串。这将重新输入表记录以下名称:

myserver.mydb.customers_shard1
myserver.mydb.customers_shard2
myserver.mydb.customers_shard3

topic.replacement

指定了一个正则表达式,它代表了目的地主题名称。转换路线每个匹配的记录,这个话题被这个表达式。在这个例子中,记录上面列出的三个分片表将被路由到myserver.mydb.customers_all_shards的话题。

schema.name.adjustment.mode

指定的消息键模式名来自产生的主题名称应调整兼容消息转换器使用的连接器。价值可以没有一个(默认)或avro

自定义配置

您可以定义自定义配置SMT谓词语句指定的表你想要转换的过程,还是不过程。谓词可能有用如果你配置SMT正则表达式相匹配的路由表,你不希望SMT改变一个特定的表相匹配的表达式。

确保唯一键

De开云体育官方注册网址bezium更改事件键使用表列的表的主键。路由记录多个物理表的一个主题,事件键必须是唯一的在所有的表。然而,它是可能的每个物理表有一个主键,只表内是独一无二的。例如,中的一行myserver.mydb.customers_shard1表可能有相同的键值的行myserver.mydb.customers_shard2表。

确保每个事件关键是独一无二的整个表的更改事件记录去相同的话题,这个话题路由转换将一个字段插入更改事件的钥匙。默认情况下,插入的字段的名称__dbz__physicalTableIdentifier。插入的字段的值是默认目标主题名称。

如果你想,你可以配置路由转换话题不同的字段插入钥匙。要做到这一点,指定key.field.name选项,将其设置为一个字段名,不与现有的主键字段名称冲突。例如:

变换=重新路由transforms.Reroute.type = io.debezium.t开云体育官方注册网址ransforms.ByLogicalTableRouter transforms.Reroute.topic.regex = (. *) customers_shard (. *) transforms.Reroute.topic.replacement customers_all_shards = 1美元transforms.Reroute.key.field.name=shard_id

这个例子添加shard_id领域的关键结构路由记录。

如果你想调整关键的新字段的值,配置这两个选项:

key.field.regex

指定正则表达式的转换适用于缺省目标主题名称来捕获一个或多个字符组。

key.field.replacement

指定一个正则表达式来确定插入的关键字段的值的那些捕获组。

例如:

transforms.Reroute.key.field.regex = (. *) customers_shard (. *) transforms.Reroute.key.field.replacement = 2美元

在这个配置中,我们假设缺省目标主题名称是:

myserver.mydb.customers_shard1
myserver.mydb.customers_shard2
myserver.mydb.customers_shard3

转换使用捕获的值在第二组,碎片数量,关键的新字段的值。在这个例子中,将插入键字段的值1,2,或3

如果你的表包含全局惟一键和你不需要改变的关键结构,你可以设置key.enforce.uniqueness选项:

…transforms.Reroute.key.enforce。独特性= false……

选择路由转换有选择地应用主题

除了改变事件消息,Debezium连接器排放数据库变化发生时,连接器还散发出其他类型的消息,包括开云体育官方注册网址心跳消息,和元数据信息模式变化和事务。开云体育电动老虎机因为这些消息的结构不同于SMT的改变事件消息的结构设计过程,最好配置连接器有选择地应用SMT,这样流程只有预期的数据变化信息。

您可以使用下列方法之一来配置连接器应用SMT选择性:

配置选项

下表描述了主题路由SMT配置选项。

表1。主题路由SMT配置选项
选项 默认的 描述

指定正则表达式的转换适用于每个更改事件记录,以确定是否应该被路由到一个特定的主题。

指定了一个正则表达式,它代表了目的地主题名称。转换路线每个匹配的记录,这个话题被这个表达式。这个表达式可以参考组被指定的正则表达式topic.regex。指一组,指定1美元,2美元,等等。

真正的

指示是否要添加一个字段来记录的更改事件的关键。添加一个关键字段可以确保每个事件关键是独一无二的整个表的更改事件记录去同一主题。这有助于防止冲突的更改事件记录有相同的关键,但来自不同的源表。

指定如果你不想要转换添加一个关键字段。例如,如果您从分区路由记录PostgreSQL表一个主题,您可以配置key.enforce.uniqueness = false因为独特的键是保证分区PostgreSQL表。

__dbz__physicalTableIdentifier

字段的名称添加到更改事件的关键。这个字段的值确定原来的表名。SMT添加这个字段,key.enforce.uniqueness必须真正的,这是默认的。

指定正则表达式的转换适用于缺省目标主题名称来捕获一个或多个字符组。SMT应用这个表达式,key.enforce.uniqueness必须真正的,这是默认的。

指定一个正则表达式来确定插入的关键字段的值的组被指定的表达式key.field.regex。SMT应用这个表达式,key.enforce.uniqueness必须真正的,这是默认的。

没有一个

指定消息键模式名称来源于如何产生的主题名称应调整兼容消息转换器使用的连接器,包括:没有一个不应用任何调整(默认),avro替换字符,不能用于强调Avro类型名称。

16

大小用于LRUCache马克斯条目。缓存将旧/新模式逻辑表键和值,还缓存派生密钥和正则表达式的结果为提高源记录转换话题。