Как ограничить вызовы в хранилище BLOB-объектов из EventProcessorHost? - PullRequest
0 голосов
/ 13 января 2020

У меня есть два 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? Могу ли я повернуть какие-либо другие регуляторы или ручки, например, настроить разделы, чтобы ограничить количество вызовов памяти?

1 Ответ

0 голосов
/ 14 января 2020

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

  1. Уменьшить количество разделов. Один раздел может обрабатывать до 1 МБ / с c или 1 КБ событий / с c. Если, конечно, потребители не выполняют сложные вычисления во время обработки событий.

  2. Уменьшите количество хостов, если хосты работают вхолостую. Это поможет сократить издержки ввода-вывода хранилища, создаваемые каждым хостом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...