eventhub публикует очень медленно

Я использую эти фрагменты кода для публикации событий в концентраторе событий:

// ...

var eventHubClient = EventHubClient.CreateFromConnectionString(ConnectionString, EventHubName);

// ...

var serializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None };
var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(evt, serializerSettings));
var eventToBeSend = new EventData(data) {PartitionKey = "Bla"};
eventHubClient.Send(eventToBeSend);

Это кажется очень медленным (т.е. вызов метода eventHubClient.Send занимает довольно много времени). Могу ли я что-нибудь сделать, чтобы ускорить это?


person cs0815    schedule 28.02.2016    source источник


Ответы (2)


Вы можете попытаться сгруппировать события для отправки и использовать SendBatchAsync() . Пока размер вашего пакета не превышает 256 КБ для одной операции, это потенциально может значительно ускорить доставку сообщения.

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

Существует хорошая страница о производительности служебной шины:

https://azure.microsoft.com/nb-no/documentation/articles/service-bus-performance-improvements/

person Pedro G. Dias    schedule 29.02.2016

Одним из наиболее распространенных узких мест при отправке большого объема данных в концентратор событий является неправильный набор единиц пропускной способности.

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

Что такое единицы пропускной способности концентраторов событий?

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

  • До 1 МБ в секунду входящих событий (событий, отправляемых в концентратор событий), но не более 1000 входящих событий, операций управления или вызовов API управления в секунду.
  • До 2 МБ в секунду исходящих событий (событий, получаемых из концентратора событий). До 84 ГБ для хранения событий (достаточно для 24-часового периода хранения по умолчанию).
  • Единицы пропускной способности концентраторов событий оплачиваются ежечасно на основе максимального количества единиц, выбранных в течение данного часа. Вы можете автоматически увеличивать число единиц пропускной способности по мере увеличения использования.
person Javier Solis    schedule 09.10.2017
comment
Если TU настроены неправильно, это может стать узким местом и снизить производительность. - person Javier Solis; 09.10.2017