用于 Azure 事件中心接收器的 Debezium 服务器将消息发送到多个分区键

问题描述 投票:0回答:1

我正在为 PostgreSQL azure 数据库实现 CDC。我希望将事件发送到 azure 事件中心。我当前的计划是使用 Debezium Server 和事件中心接收器来执行此操作。但是我想按表强制执行事件顺序。从这篇文章我知道我可以通过具有多个分区的单个主题但每次仅将事件从单个表发送到特定分区来做到这一点。

然而,Debezium 似乎没有提供一个很好的方法来处理这个问题。您可以为要发送到的所有事件指定分区键,但不能为每个事件动态指定。我看到的唯一可以解决此问题的另一件事是自定义接收器实现或传递到配置中的自定义 EventHubProducerClient 实现。

我有哪些处理此问题的选项?是否有另一种方法来构建此解决方案,以便我不必使用分区键?或者自定义接收器实现将是我最好的选择?或者我应该放弃 debezium 并编写一个自定义侦听器/发布器?

背景/要求

  • 通常要运行 Debezium,您需要运行一个 kafka 实例,但是 如果可能的话我不想使用kafka,因为我已经计划好了 使用事件中心,这似乎是两面派,这是另一个需要维护的服务。
  • 事件中心的使用者读取事件时按表对事件进行 FIFO 排序
  • 所有逻辑数据库更改都会转化为事件
  • 团队中没有 Java 开发人员,因此自定义(Java)实现将扩展我们的专业知识。
postgresql azure-eventhub debezium change-data-capture
1个回答
0
投票

配置示例:

debezium.source.table.include.list=dbo.TableOne,dbo.TableTwo,dbo.TableThree
debezium.source.transforms=PartitionRouting
debezium.source.transforms.PartitionRouting.type=io.debezium.transforms.partitions.PartitionRouting
debezium.source.transforms.PartitionRouting.partition.payload.fields=source.table,source.table,source.table
debezium.source.transforms.PartitionRouting.partition.topic.num=32

partition.payload.fields
设置(参见文档)确定跨分区分发事件的哈希函数应使用事件中的哪个字段。
source.table
将是不带架构的表名称,因此在此示例中为
TableOne
/
TableTwo
/
TableThree

根据上述配置,来自

TableOne
/
TableTwo
/
TableThree
的所有事件都将被发送到一个分区。因此,仅使用配置的 32 个分区中的 3 个。

如果设置为

fields=source.table,source.table,change.Id
那么来自
TableOne
TableTwo
的所有事件将被发送到它们自己的分区,而来自
TableThree
的事件将在所有 32 个分区之间平均分配(但特定行的所有事件将始终被发送)到同一个分区)。

© www.soinside.com 2019 - 2024. All rights reserved.