请帮我澄清一下。
在处理来自Azure事件中心的事件并使用ConsumerGroupName X创建EventProcessorHost时。如果我在多个进程(而非线程)上执行此操作,并且创建了多个均具有ConsumerGroupName X的EventProcessorHost,那么它们将从同一分区读取并因此从中读取多次获得同一事件(在赛车状态下)?
当使用ConsumerGroupName X和另一个ConsumerGroupName Y处理事件时,两个ConsumerGroups是否都获取所有事件,还是它们每个仅从某个分区获取事件?
在IEventProcessor的ProcessEventsAsync中处理事件时。等待context.CheckpointAsync();真的吗?它是仅为ConsumerGroup设置检查点,还是为EventHub设置全局设置,以使这些事件不再被查看。这里的上下文是租用分区吗?
编辑:确定,所以我取得了一些进展(如果我错了,请纠正我):
每个消费者将获得所有消息。
租约被分配了一个EventProcessorHost,因此它需要一个唯一的名称,因此使用者组名称在这里并没有真正的意义。
在context.CheckpointAsync上仍不确定100%,但我相信这仅适用于ConsumerGroup?
最佳答案
是的,如果您为多个EventProcessorHosts提供相同的使用者组名称,则它们将使用Blob租约进行协调(假设您为它们提供了不同的唯一标识符),因此一次只能在一个分区上工作。通常,您将在多台计算机上具有多个进程,以并行化工作。随着进程的重新启动(存在延迟),分区可以并且将在计算机之间移动。
如果使用不同的使用者组名称X和Y,则X上的处理器将仅与X上的处理器配合,而Y上的处理器将仅与Y上的处理器配合。如果两个不同的处理器都位于同一处理器中,则可以在两个不同的处理器上使用相同的名称。不同的消费群体。也就是说,您可以在X中使用EventProcessorHost“一个”,而在Y中使用另一个EventProcessorHost“两个”,它们不应相互干扰。
确定检查点进度时,的确确实是针对该ConsumerGroup。正如我提到的here,我相信将在用于协调租约的blob中跟踪偏移量。这样,每个ConsumerGroup都可以在不了解彼此的情况下进行检查点(但可能不应该对每条消息都进行检查点)。
关于c# - Azure EventHub与ConsumerGroup之间的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33230707/