azure - 事件中心 - 避免重复消费以防多个消费者组
问题描述
我正在执行一项任务,我正在使用 pyspark/python 从事件中心读取事件。当我有多个消费者组时,我会收到重复的消息,这是一种行为。例如:我有 2 个消费者组(CG)和 2 个事件。CG1 消耗 event1 并且当这个过程开启时,第二个事件被触发然后 CG2 将消耗这很好但是现在在 CG1 在 event1 消耗之后它的消耗 event2 之后我们想要避免。即使检查点可用,它也会失败。这是默认行为吗?
解决方案
根据您的说法,您添加了多个消费者组以根据您的评论处理大量消息:
Q:为什么你还是选择使用多个消费群体?
A:有很多消息流入,所以我们增加了两条。
横向扩展是使用分区完成的,而不是使用消费者组。它们被设计为独立的。你不能反对这一点。
你的问题:
我有 2 个消费者组(CG)和 2 个事件。CG1 消耗 event1 并且当这个过程开启时第二个事件被触发然后 CG2 将消耗这很好但是现在在 CG1 在 event1 消耗之后它的消耗 event2 之后我们想要避免。即使检查点可用,它也会失败。这是默认行为吗?
答案是肯定的,这是默认行为。消费者组是整个消息流的单独视图。每个消费者组都有自己的偏移量(检查点),根据他们已处理的该流的消息,它们在哪里。这意味着每个消费者组都将收到每条消息。
从文档:
消费者组:整个事件中心的视图(状态、位置或偏移量)。消费者组使消费应用程序能够分别拥有事件流的单独视图。他们以自己的节奏和自己的偏移量独立读取流。
这张架构图还显示了消息如何流经所有消费者组。
另请参阅此答案,该答案提供有关消费者组的更多详细信息。
同样,如果您想扩展,请不要使用消费者组,而是调整您的预置吞吐量单位、分区或改进处理逻辑。请参阅有关可伸缩性的文档。
推荐阅读
- c - 演示需要用于网络摄像头图像的 OpenCV。(已安装 opencv 并设置 opencv4=1)
- database - 如何将数据库从 odoo 14 导入到 postgresql?
- reactjs - 我们如何在多选下拉框中传递整个选项列表
- arrays - 在 C 中的数组中已经计算过一次后,如何停止计算特定值的重复项?
- javascript - 使用网络摄像头眼动追踪进行交互式数据分析
- php - 使用 UNION 的 MYSQL 查询在本地 Xampp 中有效,但在生产环境中无效
- reactjs - 每次单击按钮时如何在反应组件内渲染反应组件?
- javascript - 如何用
- python - 在英雄联盟 TFT 中跟踪移动对象
- php - 如何从 MYSQL 数据库中每秒获取数据