Azure EventHub和ConsumerGroups之间的关系

时间:2015-10-20 07:38:30

标签: c# azure azure-eventhub

请帮助我澄清一下。

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

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

1 个答案:

答案 0 :(得分:3)

是的,如果您为多个EventProcessorHosts提供相同的Consumer Group名称,那么他们将使用blob租约进行协调(假设您已经为它们指定了不同的唯一标识符),因此每次只有一个将在分区上工作。通常,您将在多台计算机上拥有多个进程,以便并行化工作。当进程重新启动时,分区可以并且将在机器之间移动(有延迟)。

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

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