事件中心 - 避免重复消费,以防多个消费群体

问题描述

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

解决方法

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

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

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

您的问题:

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

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

来自the docs

消费者群体:整个事件中心的视图(状态、位置或偏移)。消费者组使每个消费应用程序都拥有一个单独的事件流视图。他们按照自己的节奏和偏移量独立读取流。

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

enter image description here

另请参阅 this answer,提供有关消费者群体的更多详细信息。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...