【问题标题】:SQL Server to Event hub - event duplicationSQL Server 到事件中心 - 事件复制
【发布时间】:2019-01-27 20:01:01
【问题描述】:
我的应用程序使用来自事件中心的事件。事件中心由 Azure SQL Server 数据库填充。然后,单个消费者使用来自集线器的事件。
据我了解,事件中心上的事件可能会重复(因为事件中心使用“至少一次”策略)。例如,在 DB 上执行一次的 SQL 查询可能会多次驻留在事件中心(由于某些通信失败 + 重试)
我的问题是:
我是否正确(单个 SQL Server 事件可能不止一次驻留在事件中心)?如果是这样,这些重复的 SQL Server 事件是否可以驻留在不同的分区上?
如何识别重复的事件(因为每个 SQL Server 事件中都没有“消息 ID”字段)?
非常感谢,
艾坦。
【问题讨论】:
标签:
sql-server
duplicates
azure-eventhub
【解决方案1】:
1.由于负载均衡因素,您的重复事件可能驻留在相同或不同的分区上
2.要检测重复事件,您可以使用序列号和partitionkey 的组合作为比较因子,因为事件的序列号在分区内是唯一的。
【解决方案2】:
您的数据复制到事件中心的方式将决定您需要在此处使用的策略...见下文。
这取决于数据是如何发送到事件中心的,而重复的记录是否会在不同的分区中。如果将数据发送到事件中心的代码设置了PartitionKey,并且每次发送记录时PartitionKey 都相同,则重复的记录将驻留在同一分区中。
为了确定重复项,您需要一些唯一 ID(或字段组合以创建唯一 ID)对于同一条记录始终相同。如果排序很重要,则唯一 ID 通常用作 PartitionKey。