【问题标题】:Relationship between Azure EventHub and ConsumerGroupsAzure 事件中心和消费者组之间的关系
【发布时间】:2016-01-18 18:16:54
【问题描述】:

请帮我澄清一下。

  • 在处理来自 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?

【问题讨论】:

标签: c# azure azure-eventhub


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 2018-04-14
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多