Azure Eventhub / Хост обработчика событий: разбиение не работает, как и предполагалось - PullRequest
0 голосов
/ 10 марта 2020

Сейчас мы работаем над проектом, который реализует и использует Azure Eventhub. Мы используем хост обработчика событий для обработки данных из Eventhub. У нас есть 32 раздела, распределенных по 3 узлам, и мы задаемся вопросом, как Хост обработчика событий распределяет и балансирует разделы между получателями / узлами - особенно при использовании ключа раздела.

All data from all 4 customers

В настоящее время у нас есть 4 разных клиента (синий, оранжевый, фиолетовый и светло-синий), которые отправляют нам данные разных размеров. Как вы видите, синий клиент слева отправляет ок. 132 тыс. Строк данных, в то время как светло-голубой клиент справа только отправляет 28. Наша теория состояла в том, что с учетом ключа раздела, основанного на клиенте (coloridentification), мы увидим, что данные о клиентах будут размещаться только в одном узле. Вместо этого мы можем видеть, что данные как-то равномерно распределены по 3 узлам, как показано ниже:

Узел 1:

Node 1

Узел 2:

Node 2

Узел 3:

Node 3

Есть ли что-то мы неправильно поняли, как работает использование ключа раздела? Из того, что мы прочитали в документации, затем, когда мы не указываем ключи раздела, будет использоваться «циклический» подход - но даже с использованием ключа раздела он каким-то образом распределяет их равномерно. Мы как-то подчеркиваем узлы - у синего клиента огромный объем данных, а у другого почти ничего нет? Или что происходит?

Чтобы представить нашу теорию, мы нарисовали следующее: Possibly what is happening

Итак, мы подчеркиваем верхний узел с синим клиентом, что в итоге должно переместить раздел на средний узел?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Джесси уже объяснил, для чего нужен ключ раздела, поэтому я не буду повторять это.

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

  1. узел-1 обрабатывает данные из customerA только при использовании событий из eventhub-1

  2. узел-2 обрабатывает данные из customerB только за счет использования событий из eventhub-2 и т. д. ...

Использование ключа раздела на самом деле не относится к бизнес-логике c здесь.

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

0 голосов
/ 10 марта 2020

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

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

Чтобы разрешить сервису циклический перебор при публикации, нельзя указать ключ раздела или явный идентификатор раздела.

...