我有两个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的正常数量的存储调用吗?我还有其他可以转动的刻度盘或旋钮吗?调整分区以限制存储调用的数量?
我有两个Azure Eventhub,每个都有32个分区。每秒大约有700个事件通过事件中心,首先是一个,然后是另一个。一个EventHub具有3个并发阅读器/ ...
鉴于您已经优化了处理器主机和分区管理器选项,所以我只推荐几件事: