事件中心内的可用性和一致性

本文提供了有关 Azure 事件中心支持的可用性和一致性的信息。

可用性

Azure 事件中心分散了跨数据中心内多个故障域的群集中单个甚至计算机整个机架发生灾难性故障的风险。 它实现了透明的故障检测和故障转移机制,使服务将继续在有保证的服务级别内运行,并且在发生此类故障时通常不会出现明显的中断。

如果在包含可用性区域的区域中创建了事件中心命名空间,则中断风险会进一步分散到三个物理上分离的设备,并且该服务有足够的容量预留,可立即应对整个设施的全部灾难性损失。 有关详细信息,请参阅 Azure 事件中心 - 异地灾难恢复

如果客户端应用程序将事件发送到事件中心,但未指定分区,则事件会自动在事件中心内的各个分区之间分布。 如果某个分区由于某种原因而不可用,则会在其余分区之间分布事件。 此行为可实现最大运行时间量。 对于需要最大运行时间的用例,此模型是首选模型,而不是将事件发送到特定分区。

一致性

在某些方案中,事件的排序可能十分重要。 例如,可能希望后端系统先处理更新命令,再处理删除命令。 在此方案中,客户端应用程序将事件发送到特定分区,以便保留排序。 当使用者应用程序从分区使用这些事件时,将按顺序读取它们。

使用此配置,请记住,如果发送到的特定分区不可用,则会收到错误响应。 作为对比,如果未与单个分区关联,则事件中心服务会将事件发送到下一个可用分区。

因此,如果高可用性最为重要,则不要以特定分区为目标(使用分区 ID/分区键)。 使用分区 ID/键会将事件中心的可用性降级到分区级别。 在这种情况下,需在可用性(无分区 ID/键)和一致性(将事件固定到特定分区)之间做出明确选择。 有关事件中心内分区的详细信息,请参阅分区

附录

发送事件时不指定分区

我们建议在不设置分区信息的情况下将事件发送到事件中心,以允许事件中心服务在分区之间均衡负载。 请参阅以下快速入门,了解如何以不同编程语言实现此目的。

将事件发送到特定分区

本部分介绍如何使用不同的编程语言将事件发送到特定分区。

若要将事件发送到特定分区,请使用 EventHubProducerClient.CreateBatchAsync 方法通过在 CreateBatchOptions 中指定 PartitionIdPartitionKey 来创建批处理。 以下代码通过指定分区键将一批事件发送到特定分区。 事件中心确保共享分区键值的所有事件存储在一起,并按到达顺序进行传递。

var batchOptions = new CreateBatchOptions { PartitionKey = "cities" };
using var eventBatch = await producer.CreateBatchAsync(batchOptions);

还可以通过在 SendEventOptions 中指定 PartitionId 或 PartitionKey 来使用 EventHubProducerClient.SendAsync 方法 。

var sendEventOptions  = new SendEventOptions { PartitionKey = "cities" };
// create the events array
producer.SendAsync(events, sendOptions)

后续步骤

访问以下链接可以了解有关事件中心的详细信息: