Microsoft Azure Iot Hub 中分区的作用是什么?

What is the function of a partition in the Microsof Azure Iot Hub?

当我要创建一个Iot Hub 时,Azure 平台要求提供IoT Hub 的分区数。这个主题的分区我看过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 个 readers,一个 (R1) 配置为使用 C1 读取,另一个 (R2) 配置为使用 C2 读取。

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

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

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

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

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

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

每个 reader 通过消费者组连接到事件中心分区,进度存储在每个消费者组的每个分区中。因此,从某种意义上说,reader 有其自身的进展,但 reader 是短暂的,连接到同一分区的 reader 的新实例将在先前的 [=80] 处继续=] 离开了。

@Peter回答完全正确,我再补充几句。

Event hub 中的分区 就像高速公路上的车道,我们没有创建宽阔的道路,而是使用车道系统轻松通过交通,当我们阻塞一条车道时,这并不意味着整条高速公路都被堵了

使用此技术EventHub/IoTHub 允许我们每秒摄取数百万条记录