分区路由

默认情况下,当Debezium检测开云体育官方注册网址到的变化数据收集,它发出的更改事件发送到一个主题,它使用了一个Apache卡夫卡分区。中描述的定制的卡夫卡自动主题创建连接,您可以自定义缺省配置路由事件到多个分区,基于散列的主键。

然而,在某些情况下,您可能还希望Debezium分区路由事件到一个特定的主题。开云体育官方注册网址分区路由SMT使您能够事件路由到特定目的地分区基于一个或多个指定负载字段的值。计算目标分区,Debezium使用散列指定的字段值。开云体育官方注册网址

例如:基本配置

您配置分区路由转换Debezium连接器卡夫卡的连接配置。开云体育官方注册网址配置指定以下参数:

partition.payload.field

指定字段的事件有效负载SMT使用计算目标分区。可以使用点符号来指定嵌套负载字段。

partition.topic.num

指定分区的数量在目的地的话题。

partition.hash.function

指定使用哈希函数散列的字段将确定目的地分区的数量。

默认情况下,Debezi开云体育官方注册网址um航线所有更改事件记录的数据收集到一个Apache配置卡夫卡的话题。连接器不直接事件记录中的特定分区的话题。

配置一个Debezium连接器开云体育官方注册网址路由事件到一个特定的分区,配置PartitionRoutingSMT在卡夫卡Debezium连接器的连接配置。开云体育官方注册网址

例如,您可以添加以下连接器配置中配置。

…topic.creation.default.partitions = 2 topic.creation.default.replication.factor = 1…的话题。前缀=实现变换= PartitionRouting transforms.PartitionRouting.type = io.debezium.transforms开云体育官方注册网址.partitions.PartitionRouting transforms.PartitionRouting.partition.payload.fields = change.name transforms.PartitionRouting.partition.topic。num = 2 transforms.PartitionRouting。谓语= allTopic谓词= allTopic predicates.allTopic.type = org.apache.kafka.connect.transforms.predicates。TopicNameMatches predicates.allTopic.pattern =满足。*……

基于前面的配置,只要SMT接收一条消息,是开往主题名称开头的前缀,实现,它重定向消息到一个特定的主题分区。

SMT计算目标分区从一个散列的值的名字消息有效负载。通过指定'allTopic的谓词,配置有选择地应用SMT。的改变前缀是一个特殊的关键字,使SMT自动引用元素描述的有效载荷之前数据的状态。如果一个指定的字段不存在的事件消息,SMT忽略它。如果没有一个字段存在于消息,然后转换完全忽略了事件消息,提供的原始版本信息缺省目标主题。指定的分区的数量topic.num设置在SMT配置必须匹配指定的分区数量卡夫卡连接配置。例如,在前面的配置示例中,卡夫卡连接属性指定的值topic.creation.default.partitions匹配topic.num在SMT配置值。

鉴于这种产品

表1。产品表

id

的名字

描述

重量

101年

踏板车

小型两轮摩托车

3.14

102年

汽车电池

12 v汽车电池

8.1

103年

打钻头

12包的钻头尺寸从40 # # 3

0.8

104年

12盎司木工锤

0.75

105年

14 oz木工锤

0.875

106年

16盎司木工锤

1.0

107年

岩石

盒各种岩石

5.3

108年

夹克

水有抵抗力的黑风断路器

0.1

109年

备用轮胎

24英寸的备用轮胎

22.2

根据配置,SMT路线改变事件的记录字段名相同的分区。的物品id104年,105年,106年被路由到相同的分区。

例如:高级配置

假设您希望从两个数据集合路由事件(t1, t2)同一主题(例如,my_topic),从数据收集和你想分区事件t1利用场f1,从数据收集和分区事件t2利用f2。

你可以使用以下配置:

变换= PartitionRouting transforms.PartitionRouting.type = io.debez开云体育官方注册网址ium.transforms.partitions.PartitionRouting transforms.PartitionRouting.partition.payload.fields = change.f1,改变。f2 transforms.PartitionRouting.partition.topic。num = 2 transforms.PartitionRouting。谓语= myTopic谓词= myTopic predicates.myTopic.type = org.apache.kafka.connect.transforms.predicates。TopicNameMatches predicates.myTopic.pattern = my_topic

前面的配置没有指定如何选择另外的事件,这样他们被发送到一个特定的目的地的话题。如何发送事件信息主题默认目的地以外的话题,看到主题路由SMT,看到了主题路由SMT

迁移从Debezium Compute开云体育官方注册网址Partition SMT

的Deb开云体育官方注册网址eziumComputePartitionSMT在将来发布的版本中停止。信息在以下部分描述如何从迁移ComputePartitionSMT的新PartitionRoutingSMT。

假设所有的配置设置相同数量的分区主题,替换以下与“PartitionRouting ComputePartition 'configurationSMT。下面的例子提供了一个比较的两个配置。

例如:遗产ComputePartition配置
…topic.creation.default.partitions = 2 topic.creation.default.replication.factor = 1…的话题。前缀=实现变换= ComputePartition transforms.ComputePartition.type = io.debezium.transforms开云体育官方注册网址.partitions.ComputePartition transforms.ComputePartition.partition.data-collections.field.mappings = inventory.products:名称,库存。订单:购买者transforms.ComputePartition.partition.data-collections.partition.num.mappings = inventory.products: 2、库存。订单:2…

替换之前的ComputePartition用下面的PartitionRouting配置。例子:PartitionRouting配置取代了ComputePartition配置

…topic.creation.default.partitions = 2 topic.creation.default.replication.factor = 1…的话题。前缀=实现变换= PartitionRouting transforms.PartitionRouting.type = io.debezium.transforms开云体育官方注册网址.partitions.PartitionRouting transforms.PartitionRouting.partition.payload.fields = change.name change.purchaser transforms.PartitionRouting.partition.topic。num = 2 transforms.PartitionRouting。谓语= allTopic谓词= allTopic predicates.allTopic.type = org.apache.kafka.connect.transforms.predicates。TopicNameMatches predicates.allTopic.pattern =满足。*……

如果SMT发出事件主题不共享相同数量的分区,您必须指定唯一的partition.num.mappings值为每个主题。例如,在下面的示例中,遗留的主题产品收集配置了3个分区,和主题订单数据收集是配置了2分区:

例如:遗产ComputePartition配置集独特的分区的值不同的主题
…的话题。前缀=实现变换= ComputePartition transforms.ComputePartition.type = io.debezium.transforms开云体育官方注册网址.partitions.ComputePartition transforms.ComputePartition.partition.data-collections.field.mappings = inventory.products:名称,库存。订单:购买者transforms.ComputePartition.partition.data-collections.partition.num.mappings = inventory.products: 3、库存。订单:2…

替换之前的ComputePartition使用以下配置PartitionRouting配置:。PartitionRouting配置集独特partition.topic.num值不同的主题

…的话题。前缀=实现变换= ProductsPartitionRouting OrdersPartitionRouting transforms.ProductsPartitionRouting.type = io.debezium.transforms开云体育官方注册网址.partitions.PartitionRouting transforms.ProductsPartitionRouting.partition.payload.fields = change.name transforms.ProductsPartitionRouting.partition.topic。num transforms.ProductsPartitionRouting = 3。谓语=产品transforms.OrdersPartitionRouting.type = io.debezium.tra开云体育官方注册网址nsforms.partitions.PartitionRouting transforms.OrdersPartitionRouting.partition.payload.fields =改变。购买者transforms.OrdersPartitionRouting.partition.topic。num = 2 transforms.OrdersPartitionRouting。谓语=产品谓词=产品,订单predicates.products.type = org.apache.kafka.connect.transforms.predicates。TopicNameMatches predicates.products.pattern = fulfillment.inventory。产品predicates.orders.type=org.apache.kafka.connect.transforms.predicates.TopicNameMatches predicates.orders.pattern=fulfillment.inventory.orders ...

配置选项

下表列出了配置选项,您可以设置分区路由SMT。

表2。分区路由SMT (PartitionRouting)配置选项

财产

默认的

描述

指定的字段SMT使用事件有效负载计算目标分区。使用点符号如果你想添加字段从原始的SMT负载输出数据结构中的特定水平。访问字段相关的数据集合,您可以使用:,之前,或改变。“改变”字段是一个特殊的领域,结果在SMT自动填充内容‘后’或‘之前’元素,这取决于类型的操作。如果一个指定的字段不存在记录,SMT跳过它。例如,after.name、source.table change.name

分区的数量为主题的SMT行为。使用TopicNameMatches谓词过滤记录按主题。

java

哈希函数计算时使用散列的字段将确定目的地分区的数量。可能的值是:

java——标准Java对象:hashCode函数

杂音——最新版本的MurmurHash函数,MurmurHash3

这个配置是可选的。如果使用未指定或无效的值,将使用默认值。