Какова функция раздела в Microsof Azure Iot Hub?

Когда я собираюсь создать Iot Hub, платформа Azure запрашивает количество разделов IoT Hub. Я читал о разделах по этой теме для разделов устройства-облака Azure iot hub, но я не понимаю, какова связь между группами потребителей и разделами, и какова связь с чтением данных.

2 ответа

Разделы там первичны для поддержки масштабирования. Поведение по умолчанию заключается в том, что сообщения, отправляемые на концентратор, делятся на эти разделы.

Допустим, у нас есть 4 раздела (1-4), содержащие несколько сообщений (AL):

Раздел 1: А, Е, Я
Раздел 2: B, F, J
Раздел 3: C, G, K
Раздел 4: D, H, L

Допустим также, что мы определили 2 группы потребителей, C1 и C2. Если вы запускаете процесс для чтения сообщений из концентратора, вы определяете группу потребителей (если нет, то используется группа потребителей по умолчанию).

Итак, позвольте нам иметь 2 считывателя, один (R1) настроен на чтение с использованием C1, а другой (R2) для чтения с использованием C2.

Оба читателя имеют доступ к одинаковым разделам и сообщениям. Но у обоих есть свой собственный трекер прогресса. Это важная часть!

В сценарии реального слова у вас может быть поток данных, допустим, сообщения журнала. Требования заключаются в том, что все сообщения журнала должны быть записаны в базу данных, и что некоторые сообщения, имеющие более высокий уровень журнала, должны отправляться как оповещение с высоким приоритетом с использованием SMS-сообщений. Если у вас будет только одна группа потребителей (C1, прочитанная R1), все сообщения будут в конечном итоге обработаны. Но если запись в базу данных идет медленно, вполне возможно, что между доставкой сообщения и обработкой сообщения проходит некоторое время.

Теперь, если бы у нас было 2 группы потребителей, читатель (R2) для этой группы потребителей (C2) мог бы пропустить все сообщения с низким уровнем логического уровня и обрабатывать только критические сообщения, которые должны быть отправлены с использованием SMS-сообщений. Этот читатель будет проходить через все сообщения намного быстрее, чем тот, который должен записывать все сообщения в базу данных.

TL; DR: несколько групп потребителей могут использоваться для разделения медленных потоковых процессоров для более быстрых потоковых процессоров. Каждая группа потребителей отслеживает свой прогресс в потоке.

Так что в итоге прогресс может выглядеть так:

Потребительская группа 1 (занимающая много времени обработка)

Раздел 1: А, Е, Я
Раздел 2: B, F, J
Раздел 3: C, G, K
Раздел 4: D, H, L

Потребительская группа 2 (выполняет быструю обработку сообщений)

Раздел 1: А, Е, Я
Раздел 2: B, F, J
Раздел 3: C, G, K
Раздел 4: D, H, L

где полужирные символы представляют обработанное сообщение.

редактировать
Если у меня есть два читателя в одной и той же группе потребителей, у каждого читателя есть свой прогресс или прогресс по каждой группе потребителей?

Каждый читатель подключен к разделу концентратора событий через группу потребителей, прогресс сохраняется для каждого раздела в группе потребителей. Таким образом, в некотором смысле у читателя есть свой собственный прогресс, но читатель недолговечен, новый экземпляр считывателя, подключенного к тому же разделу, продолжится там, где ушел предыдущий читатель.

@ Петр ответ абсолютно правильный, позвольте мне добавить еще несколько слов.

Разделение в концентраторе событий, как полоса на шоссе. Вместо того чтобы создавать большую широкую дорогу, мы используем систему полос для быстрого прохождения трафика, и когда мы блокируем одну полосу, это не означает, что вся магистраль заблокирована.

Используя эту технику, EventHub/IoTHub позволяют нам поглощать миллионы записей в секунду

Другие вопросы по тегам