我正在执行一项任务,我正在使用 pyspark/python 从事件中心读取事件。当我有多个消费者组时,我会收到重复的消息,这是一种行为。例如:我有 2 个消费者组(CG)和 2 个事件。CG1 消耗 event1 并且当这个过程开启时,第二个事件被触发然后 CG2 将消耗这很好但是现在在 CG1 在 event1 消耗之后它的消耗 event2 之后我们想要避免。即使检查点可用,它也会失败。这是默认行为吗?
问问题
236 次
1 回答
0
根据您的说法,您添加了多个消费者组以根据您的评论处理大量消息:
Q:为什么你还是选择使用多个消费群体?
A:有很多消息流入,所以我们增加了两条。
横向扩展是使用分区完成的,而不是使用消费者组。它们被设计为独立的。你不能反对这一点。
你的问题:
我有 2 个消费者组(CG)和 2 个事件。CG1 消耗 event1 并且当这个过程开启时第二个事件被触发然后 CG2 将消耗这很好但是现在在 CG1 在 event1 消耗之后它的消耗 event2 之后我们想要避免。即使检查点可用,它也会失败。这是默认行为吗?
答案是肯定的,这是默认行为。消费者组是整个消息流的单独视图。每个消费者组都有自己的偏移量(检查点),根据他们已处理的该流的消息,它们在哪里。这意味着每个消费者组都将收到每条消息。
从文档:
消费者组:整个事件中心的视图(状态、位置或偏移量)。消费者组使消费应用程序能够分别拥有事件流的单独视图。他们以自己的节奏和自己的偏移量独立读取流。
这张架构图还显示了消息如何流经所有消费者组。
另请参阅此答案,该答案提供有关消费者组的更多详细信息。
同样,如果您想扩展,请不要使用消费者组,而是调整您的预置吞吐量单位、分区或改进处理逻辑。请参阅有关可伸缩性的文档。
于 2021-07-15T09:51:03.017 回答