azure - Microsoft Azure Iot Hub 中的分区有什么作用?

标签 azure azure-iot-hub azure-eventhub azure-iot-hub-device-management

当我要创建 IoT 中心时,Azure 平台会请求 IoT 中心的分区数量。我已阅读有关此主题的分区 purpose of Azure iot hub device-to-cloud partitions但我不明白消费者组和分区之间有什么关系,和数据的读取有什么关系。

最佳答案

分区主要是为了支持扩展。默认行为是发送到集线器的消息被划分到这些分区上。

假设我们有 4 个分区 (1-4),其中包含一些消息 (A-L):

分区 1:A、E、I
分区 2:B、F、J
分区 3:C、G、K
分区 4:D、H、L

我们还定义了 2 个消费者组:C1 和 C2。如果您启动一个进程来从中心读取消息,则您可以定义一个消费者组(如果没有,则使用默认的消费者组)。

因此,让我们有 2 个读取器,其中一个 (R1) 配置为使用 C1 读取,另一个 (R2) 配置为使用 C2 读取。

两个读者都可以访问相同的分区和消息。但两者都有自己的进度跟踪器。 这是重要的部分!

在实际场景中,您可能有一个数据流,让我们假设日志消息。要求是所有日志消息都必须写入数据库,并且一些具有较高日志级别的消息需要使用短信作为高优先级警报发送。如果您只有一个消费者组(C1,由 R1 读取),则所有消息最终都会被处理。但是,如果数据库写入速度很慢,很可能是在传递消息和处理消息之间需要一些时间。

现在,如果我们有 2 个消费者组,该消费者组 (C2) 的读取器 (R2) 可以跳过所有低日志级别消息,只处理要使用 SMS 发送的关键消息。该读取器将比需要将所有消息写入数据库的读取器更快地浏览所有消息。

TL;DR:多个消费者组可用于将慢速流处理器与更快的流处理器分开。每个消费者组都会在流中跟踪自己的进度。

所以最终的进展可能是这样的:

消费者组1(进行一些耗时的处理)

分区 1:A、E、I
分区 2:B、F、J
分区 3:C、G、K
分区 4:D、H、L

消费者组 2(进行一些快速消息处理)

分区 1:A、E、I
分区 2:B、F、J
分区 3:C、G、 K
分区 4:D、H、L

其中粗体字符表示已处理的消息。

编辑
如果我在同一个消费者组中有两个读者,每个读者都有自己的进度还是每个消费者组都有进度?

每个读取器通过消费者组连接到事件中心分区,进度存储在每个消费者组的每个分区上。因此,从某种意义上说,读取器有自己的进度,但读取器是短暂的,连接到同一分区的读取器的新实例将继续前一个读取器离开的位置。

关于azure - Microsoft Azure Iot Hub 中的分区有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51287824/

相关文章:

azure - 通过 eventhub 的 ARM 模板设置吞吐量单位

linux - 无法通过 Visual Studio 将调试器附加到 Azure Linux Web 服务

Azure VHD 性能与 BLOB

asp.net - Azure 中休眠时间延长导致 Kestrel 性能下降

python - 将 Excel 文件流保存到 azure blob 存储

azure - 代表 Azure IoT 中心上的其他设备

azure - 当前物联网边缘解决方案的应用程序洞察集成最佳实践

azure - 使用 MQTT 通过 Websockets(端口 443)而不是端口 8883 将 ESP32 连接到 Azure Iot Hub

java - 如何使用 JAVA 以编程方式为事件中心创建消费者组?

python - 为什么 Eventhub 异步接收器每分钟仅获取 30-35 条消息?