当我要创建Iot Hub时,Azure平台会请求IoT Hub的分区数量。我已经阅读了有关purpose of Azure iot hub device-to-cloud partitions主题的分区,但是我不了解使用者组和分区之间的关系是什么,以及与数据读取的关系。
答案 0 :(得分:2)
分区主要用于支持扩展。默认行为是发送到集线器的邮件在这些分区上划分。
所以可以说我们有4个分区(1-4),其中包含一些消息(A-L):
分区1:A,E,I
分区2:B,F,J
分区3:C,G,K
分区4:D,H,L
我们还要说,我们定义了两个消费者组,C1和C2。如果启动从集线器读取消息的过程,则将定义使用者组(如果没有,则使用默认使用者组)。
因此,我们有2个读取器,一个(R1)配置为使用C1进行读取,另一个(R2)配置为使用C2进行读取。
两个阅读器都可以访问相同的分区和消息。但是两者都有自己的进度跟踪器。 这是重要的部分!
在真实情况下,您可能会有数据流,让我们假设日志消息。要求是必须将所有 日志消息写入数据库,并且需要使用sms将具有较高日志级别的一些消息作为高优先级警报发送。如果只有一个使用者组(C1,由R1读取),则最终将处理所有消息。但是,如果数据库写入速度很慢,则很可能是在传递邮件和处理邮件之间要花费一些时间。
现在,如果我们有2个使用者组,则该使用者组(C2)的读取器(R2)可以跳过所有低日志级别的消息,而仅处理将使用sms发送的关键消息。与将所有消息写入数据库所需的速度相比,该阅读器处理所有消息的速度要快得多。
TL; DR:可以使用多个使用者组将慢速流处理器分离为更快的流处理器。每个消费者组在流中跟踪自己的进度。
所以最终进度可能看起来像这样:
消费者组1(进行一些耗时的处理)
分区1: A,E ,我
分区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
其中粗体字符表示已处理的消息。
修改
如果我在同一消费者组中有两个读者,那么每个读者是否都有自己的进度,或者进度是针对每个消费者组的?
每个阅读器通过使用者组连接到事件中心分区,进度按每个使用者组的每个分区存储。因此,从某种意义上说,阅读器具有自己的进步,但是阅读器是短暂的,因此连接到同一分区的阅读器的新实例将继续到先前的阅读器离开的地方。
答案 1 :(得分:0)