多个接收者使用事件中心接收同一消息

问题描述 投票:0回答:1

在 Azure 中创建事件中心。此事件中心有 $default 使用者组。它有 32 个分区。

此事件中心有一个发送者以某种特定频率发送消息。现在该事件中心有多个接收者。发送和接收的代码完全按照“本文档”用 Python 编写。该接收器 Python 脚本在 5 个不同的虚拟机中运行。 期望的是,只有一个接收者应该接收消息并处理它。但观察到不止一个接收者正在接收同一条消息。

我读到如果没有完成检查点,可能会发生这种情况。但在示例代码中,我看到检查点已完成。还缺少什么?还是我的期望有误?

PS:以前工作过的人已经开始使用事件中心,整个基础设施和代码都是围绕事件中心的。现在离开活动中心有点困难。所以我现在打算继续使用事件中心。

python python-3.x azure azure-eventhub
1个回答
1
投票
Azure Event Hubs

大规模提供“至少一次”交付,这意味着可能会发生重复。虽然通常情况下您不会遇到任何情况,但在某些情况下可能会发生这种情况。其中一些(但不限于)包括:

消费者组内的分区上有多个接收者。

在这种情况下,所有读取器都会接收该分区的所有事件。这可能与您的情况无关,因为您正在使用 SDK,它会处理这个问题。

在提交检查点之前接收器崩溃。

检查点通常定期执行。如果处理器在标记最后一次成功处理的事件的位置之前崩溃,则新的处理器将从最后提交的检查点开始。这可能会导致获取第一个消费者在崩溃之前处理的一些事件。这很可能就是你的情况。 理想情况下,您应该将下游系统设计为幂等的。如果这太困难或不可行,请考虑删除重复事件的策略。

© www.soinside.com 2019 - 2024. All rights reserved.