首页 > 解决方案 > 事件中心 - 避免重复消费以防多个消费者组

问题描述

我正在执行一项任务,我正在使用 pyspark/python 从事件中心读取事件。当我有多个消费者组时,我会收到重复的消息,这是一种行为。例如:我有 2 个消费者组(CG)和 2 个事件。CG1 消耗 event1 并且当这个过程开启时,第二个事件被触发然后 CG2 将消耗这很好但是现在在 CG1 在 event1 消耗之后它的消耗 event2 之后我们想要避免。即使检查点可用,它也会失败。这是默认行为吗?

标签: azureazure-eventhubazure-eventhub-capture

解决方案


根据您的说法,您添加了多个消费者组以根据您的评论处理大量消息:

Q:为什么你还是选择使用多个消费群体?
A:有很多消息流入,所以我们增加了两条。

横向扩展是使用分区完成的,而不是使用消费者组。它们被设计为独立的。你不能反对这一点。

你的问题:

我有 2 个消费者组(CG)和 2 个事件。CG1 消耗 event1 并且当这个过程开启时第二个事件被触发然后 CG2 将消耗这很好但是现在在 CG1 在 event1 消耗之后它的消耗 event2 之后我们想要避免。即使检查点可用,它也会失败。这是默认行为吗?

答案是肯定的,这是默认行为。消费者组是整个消息流的单独视图。每个消费者组都有自己的偏移量(检查点),根据他们已处理的该流的消息,它们在哪里。这意味着每个消费者组都将收到每条消息。

文档

消费者组:整个事件中心的视图(状态、位置或偏移量)。消费者组使消费应用程序能够分别拥有事件流的单独视图。他们以自己的节奏和自己的偏移量独立读取流。

这张架构图还显示了消息如何流经所有消费者组。

在此处输入图像描述

另请参阅此答案,该答案提供有关消费者组的更多详细信息。

同样,如果您想扩展,请不要使用消费者组,而是调整您的预置吞吐量单位、分区或改进处理逻辑。请参阅有关可伸缩性的文档。


推荐阅读