3

请帮我澄清一下。

  • 当处理来自 Azure 事件中心的事件并使用 ConsumerGroupName X 创建 EventProcessorHost 时。如果我在多个进程(而不是线程)上执行此操作,并且我创建多个 EventProcessorHost 都使用 ConsumerGroupName X。然后他们会从同一个分区中读取,因此多次获得相同的事件(在比赛条件下)?
  • 当使用 ConsumerGroupName X 和另一个 ConsumerGroupName Y 处理事件时,两个 ConsumerGroup 是获取所有事件还是每个都只从某个分区获取事件?
  • 在 IEventProcessor 的 ProcessEventsAsync 中处理事件时。什么 await context.CheckpointAsync(); 实际上呢?它是仅为 ConsumerGroup 设置检查点,还是为 EventHub 设置全局设置,以便永远不会再查看这些事件。这里的上下文是租用的分区吗?

编辑:好的,所以我取得了一些进展(如果我错了,请纠正我):

  1. 每个消费者都会收到所有的消息。
  2. 租约被分配了一个 EventProcessorHost,因此它需要一个唯一的名称,因此消费者组名称在这里并不真正相关。
  3. 仍然不能 100% 确定 context.CheckpointAsync,但我相信它只适用于 ConsumerGroup?
4

1 回答 1

3

是的,如果您为多个 EventProcessorHosts 提供相同的消费者组名称,那么它们将使用 blob 租约进行协调(假设您为它们提供了不同的唯一标识符),因此一次只有一个可以在分区上工作。通常,您将在多台机器上拥有多个进程,以便并行化工作。随着进程重新启动(存在延迟),分区可以并且将会在机器之间移动。

如果您使用不同的消费者组名称 X 和 Y,则 X 上的处理器将仅与 X 上的处理器协调,而 Y 上的处理器将仅与 Y 上的处理器协调。您可以在两个不同的处理器上使用相同的名称,如果每个处理器都在一个不同的消费群体。也就是说,您可以在 X 中拥有 EventProcessorHost“一个”,在 Y 中拥有另一个 EventProcessorHost“两个”,它们不应该干扰。

当检查点进度时,它确实只适用于该 ConsumerGroup。正如我在这里提到的,我相信偏移量正在用于协调租赁的 blob 内进行跟踪。因此,每个 ConsumerGroup 都可以在不知道其他任何信息的情况下进行检查点(但可能不应该对每条消息都进行检查点)。

于 2015-10-21T09:16:36.157 回答