2015-10-20 109 views
3

请只帮我澄清一下。Azure EventHub和ConsumerGroups之间的关系

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

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

  1. 每个消费者将获得所有信息。
  2. 租约被分配了一个EventProcessorHost,所以它需要一个唯一的名称,所以这里的消费者组名称并不真正相关。
  3. 仍然不是100%确定的context.CheckpointAsync,但我相信它只是为ConsumerGroup?
+0

这可能会部分重复http://stackoverflow.com/questions/27789320/azure-event-hubs-and-multiple-consumer-groups –

回答

3

是的,如果你给多个EventProcessorHosts同一消费群的名称,然后他们将协调使用BLOB租赁(假设你已经给了他们不同的唯一标识符),那么只有一个会在一次一个分区工作。通常,您可以在多台机器上安装多个进程以并行化工作。随着进程重新启动(分区有延迟),分区可以并且将在计算机之间移动。

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

检查点进度时,它确实只是在该ConsumerGroup中。正如我所提到的here我相信在用于协调租赁的blob内部正在追踪抵消。因此,每个ConsumerGroup都可以在不知道其他任何信息的情况下检查点(但可能不应使用每条消息的检查点)。