Несогласованная задержка отправки и SendBatch для отправителя концентратора событий

Мы используем EventHubSender.Отправить и EventHubSender.Методы API SendBatch для отправки пакетов данных в концентраторе событий Azure. Каждый пакет данных, как правило, имеет размер 6 КБ, и существует 13 таких пакетов данных каждую секунду от 13 различных клиентских машин (каждая машина отправляет один пакет данных каждую секунду). У нас есть два концентратора событий в одном пространстве имен каждый с пакетами [6 KB * 13] в качестве входа и выхода. В виду того что полные вход и выход гораздо ниже чем емкость одного блока объем, никакой дросселировать не наблюдался.

Однако задержка отправки не остается согласованной для пакетов, отправляемых каждую секунду. Иногда задержка отправки достигает 3-4 секунд. Это поведение было протестировано для локальных клиентских компьютеров, а также клиентских компьютеров в центре обработки данных Azure (только для целей тестирования).

Фрагмент кода инициализации клиента:

var factory = MessagingFactory.CreateFromConnectionString(EventHubConnectionString);
EventHubClient eventHubClient = this.factory.CreateEventHubClient(EventHubName);
this.eventHubSender = eventHubClient.CreatePartitionedSender(EventHubPartitionId);

Фрагмент кода отправителя:

using (EventData eventData = CreateEventDataPacket(data, settings))
{
      this.eventHubSender.Send(eventData);
} 

Обратите внимание: экземпляр eventHubSender используется повторно для каждого последующего запроса на отправку, а транспортным типом, используемым в EventHubConnectionString, является AMQP.

Пожалуйста предложите если латентность можно уменьшить и сделать последовательной как для отправки, так и для методов Сендбатч.

1 ответ

  1. Вы создаете PartitionedSender, который отправляет событие в определенный раздел. На стороне службы раздел может перемещаться из одного бэкенда в другой при выполнении обновления службы, что сделает раздел недоступным в течение нескольких секунд и может привести к задержке отправки. Если вы не используете partitionedSender, клиент концентратора событий будет отправлять каждую секцию циклическим способом, который должен смягчить ситуацию при перемещении секций.

    Кроме того, задержка отправки также зависит от многих факторов, таких как сеть, балансировка нагрузки, доступность услуг и т.д.