分区路由
默认情况下,当Debezium检测开云体育官方注册网址到的变化数据收集,它发出的更改事件发送到一个主题,它使用了一个Apache卡夫卡分区。中描述的定制的卡夫卡自动主题创建连接,您可以自定义缺省配置路由事件到多个分区,基于散列的主键。
然而,在某些情况下,您可能还希望Debezium分区路由事件到一个特定的主题。开云体育官方注册网址分区路由SMT使您能够事件路由到特定目的地分区基于一个或多个指定负载字段的值。计算目标分区,Debezium使用散列指定的字段值。开云体育官方注册网址
例如:基本配置
您配置分区路由转换Debezium连接器卡夫卡的连接配置。开云体育官方注册网址配置指定以下参数:
-
partition.payload.field
-
指定字段的事件有效负载SMT使用计算目标分区。可以使用点符号来指定嵌套负载字段。
-
partition.topic.num
-
指定分区的数量在目的地的话题。
-
partition.hash.function
-
指定使用哈希函数散列的字段将确定目的地分区的数量。
默认情况下,Debezi开云体育官方注册网址um航线所有更改事件记录的数据收集到一个Apache配置卡夫卡的话题。连接器不直接事件记录中的特定分区的话题。
配置一个Debezium连接器开云体育官方注册网址路由事件到一个特定的分区,配置PartitionRouting
SMT在卡夫卡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配置值。
鉴于这种产品
表
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路线改变事件的记录字段名锤
相同的分区。的物品id
值104年
,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
迁移从Debezium Compute开云体育官方注册网址Partition SMT
的Deb开云体育官方注册网址eziumComputePartition
SMT在将来发布的版本中停止。信息在以下部分描述如何从迁移ComputePartition
SMT的新PartitionRouting
SMT。
假设所有的配置设置相同数量的分区主题,替换以下与“PartitionRouting ComputePartition 'configuration
SMT。下面的例子提供了一个比较的两个配置。
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。
财产 |
默认的 |
描述 |
指定的字段SMT使用事件有效负载计算目标分区。使用点符号如果你想添加字段从原始的SMT负载输出数据结构中的特定水平。访问字段相关的数据集合,您可以使用: |
||
分区的数量为主题的SMT行为。使用 |
||
|
哈希函数计算时使用散列的字段将确定目的地分区的数量。可能的值是: |