Azure EventHub 和 ConsumerGroups 之间的关系
Relationship between Azure EventHub and ConsumerGroups
请帮我澄清一下。
- 当处理来自 Azure 事件中心的事件,并使用 ConsumerGroupName X 创建 EventProcessorHost 时。如果我在多个进程(而不是线程)上执行此操作,并且我创建了多个 EventProcessorHost,它们都使用 ConsumerGroupName X。然后他们会从相同的分区并因此多次获得相同的事件(在赛车条件下)?
- 当使用一个 ConsumerGroupName X 和另一个 ConsumerGroupName Y 处理事件时,两个 ConsumerGroup 是否都获取所有事件,还是它们各自只获取来自特定分区的事件?
- 在 IEventProcessor 的 ProcessEventsAsync 中处理事件时。 await context.CheckpointAsync(); 是什么意思?实际上呢?它是仅为 ConsumerGroup 设置检查点,还是为 EventHub 设置全局设置,以便永远不会再次查看这些事件。这里的上下文是租用的分区吗?
编辑:好的,所以我取得了一些进展(如果我错了请纠正我):
- 每个消费者都会收到所有的消息。
- 租约被分配了一个 EventProcessorHost,因此它需要一个唯一的名称,因此消费者组名称在这里并不真正相关。
- 仍然不能 100% 确定 context.CheckpointAsync,但我相信它仅适用于 ConsumerGroup?
是的,如果您为多个 EventProcessorHost 提供相同的消费者组名称,那么它们将使用 blob 租约进行协调(假设您为它们提供了不同的唯一标识符),因此一次只有一个在一个分区上工作。通常,您会在多台机器上拥有多个进程,以便并行化工作。随着进程重新启动(存在延迟),分区可以并且将会在机器之间移动。
如果您使用不同的消费者组名称 X 和 Y,则 X 上的处理器将仅与 X 上的处理器协调,Y 上的处理器将仅与 Y 上的处理器协调。您可以在两个不同的处理器上使用相同的名称如果每个人都在不同的消费者群体中。也就是说,您可以在 X 中让 EventProcessorHost 为“一个”,在 Y 中让另一个 EventProcessorHost 为“二”,它们不应该相互干扰。
当检查点进程时,它确实只针对该 ConsumerGroup 内部。正如我提到的 我相信在用于协调租约的 blob 内部跟踪偏移量。因此,每个 ConsumerGroup 都可以在不了解对方的情况下进行检查(但可能不应该对每条消息进行检查)。
请帮我澄清一下。
- 当处理来自 Azure 事件中心的事件,并使用 ConsumerGroupName X 创建 EventProcessorHost 时。如果我在多个进程(而不是线程)上执行此操作,并且我创建了多个 EventProcessorHost,它们都使用 ConsumerGroupName X。然后他们会从相同的分区并因此多次获得相同的事件(在赛车条件下)?
- 当使用一个 ConsumerGroupName X 和另一个 ConsumerGroupName Y 处理事件时,两个 ConsumerGroup 是否都获取所有事件,还是它们各自只获取来自特定分区的事件?
- 在 IEventProcessor 的 ProcessEventsAsync 中处理事件时。 await context.CheckpointAsync(); 是什么意思?实际上呢?它是仅为 ConsumerGroup 设置检查点,还是为 EventHub 设置全局设置,以便永远不会再次查看这些事件。这里的上下文是租用的分区吗?
编辑:好的,所以我取得了一些进展(如果我错了请纠正我):
- 每个消费者都会收到所有的消息。
- 租约被分配了一个 EventProcessorHost,因此它需要一个唯一的名称,因此消费者组名称在这里并不真正相关。
- 仍然不能 100% 确定 context.CheckpointAsync,但我相信它仅适用于 ConsumerGroup?
是的,如果您为多个 EventProcessorHost 提供相同的消费者组名称,那么它们将使用 blob 租约进行协调(假设您为它们提供了不同的唯一标识符),因此一次只有一个在一个分区上工作。通常,您会在多台机器上拥有多个进程,以便并行化工作。随着进程重新启动(存在延迟),分区可以并且将会在机器之间移动。
如果您使用不同的消费者组名称 X 和 Y,则 X 上的处理器将仅与 X 上的处理器协调,Y 上的处理器将仅与 Y 上的处理器协调。您可以在两个不同的处理器上使用相同的名称如果每个人都在不同的消费者群体中。也就是说,您可以在 X 中让 EventProcessorHost 为“一个”,在 Y 中让另一个 EventProcessorHost 为“二”,它们不应该相互干扰。
当检查点进程时,它确实只针对该 ConsumerGroup 内部。正如我提到的