У меня есть два Azure Eventhub, каждый с 32 разделами. Около 700 событий проходят через концентраторы событий каждую секунду, сначала через одно, затем через другое. Один EventHub имеет 3 одновременных считывателя / EventProcessorHost, а другой - только один.
Моя проблема в том, что C# EventProcessorHost, кажется, делает довольно большое количество обращений к хранилищу BLOB-объектов для таких вещей, как аренда управление и контроль. В среднем мы говорим 800 звонков в секунду.
Мы регистрируем EventProcessorHost следующим образом
_eventProcessorHost = new EventProcessorHost(
_eventHubOptions.CurrentValue.EventHubName,
_eventHubOptions.CurrentValue.ConsumerGroupName ?? PartitionReceiver.DefaultConsumerGroupName,
_eventHubOptions.CurrentValue.EventHubConnectionString,
_eventHubOptions.CurrentValue.StorageConnectionString,
_eventHubOptions.CurrentValue.StorageName);
// Reduce lease renewal throughput for storage accounts to save price
_eventProcessorHost.PartitionManagerOptions = new PartitionManagerOptions()
{
LeaseDuration = TimeSpan.FromSeconds(60),
RenewInterval = TimeSpan.FromSeconds(50)
};
var eventProcessorOptions = new EventProcessorOptions
{
InitialOffsetProvider = partitionId =>
EventPosition.FromEnd(),
EnableReceiverRuntimeMetric = true,
MaxBatchSize = 400,
PrefetchCount = 400,
};
await _eventProcessorHost.RegisterEventProcessorFactoryAsync(_eventProcessorFactory, eventProcessorOptions);
Мы стремимся ограничить количество обращений к хранилищу. Как вы можете видеть выше, мы также продлили срок аренды с 30 секунд по умолчанию до максимума 60.
Мы реализовали его так, что контрольная точка происходит каждые 2000 сообщений, что означает что, в среднем, контрольная точка происходит не чаще, чем каждые 15 секунд на раздел.
Это нормальное количество обращений к хранилищу для координации EventProcessorHosts? Могу ли я повернуть какие-либо другие регуляторы или ручки, например, настроить разделы, чтобы ограничить количество вызовов памяти?