我有一个具有EventHub触发器和消费计划的Azure函数。在我的测试中,我将3000个事件用于几个批次的事件中心。由于3000个事件的时间几乎比300个事件的时间大10倍,所以我怀疑这个Azure功能没有扩展到多个虚拟机/实例。Azure函数EventHub触发器缩放作业函数实例
为了验证这个假设,我使用了一个Guid静态变量,我初始化了一次并记录在函数的每次运行中。所有3000次运行都记录了相同的Guid。
即是即使我指定host.json以下配置: “eventHub”:{ “maxBatchSize”:1, “prefetchCount”:10 }
逻辑的是,这会限制的并行处理在单个实例中,因此会启动多个实例,但同样只有1个Guid被记录。
请注意,这不是App Service中唯一的功能。这可能是问题吗?需要满足什么条件才能在多个虚拟机上启动功能?
编辑: 我有32个分区和20个可以通过单元。第一个问题是我使用SendBatchAsync,它不分区事件。即使SendAsync没有带来任何规模,就像它没有分区一样。因此,我创建了分区的eventhub发件人,并在客户端应用程序中发送事件时进行了循环分区。
AzureFunction处理的事件数量增加,但仍未创建超过1个虚拟机。此外,每秒处理的事件数量在开始时(每个时刻约200个)要大得多,在2000个事件之后或接近结束时,它们降至〜5。这与系统负载无关,因为在9000次事件中观察到同样的行为,在〜5k事件之后发生减速。
此Azure功能持续50-250毫秒,具体取决于负载。 它还通过Azure存储队列触发器将事件发送到另一个Azure功能。有趣的是,由队列触发器触发的这个函数不会扩展到1个以上的虚拟机,并且在eventhub缓慢触发天蓝色函数之前,它在开始时队列中有1k条消息。在host.json队列设置为 “队列”:{ “maxPollingInterval”:2000, “visibilityTimeout”: “00:00:10”, “BATCHSIZE”:32, “maxDequeueCount”:5, “newBatchThreshold” :1 }
谢谢。
这些事件分布在多少个分区? – Mikhail
事件中心有32个分区。我开始使用分区的eventhub发送器,并且性能稍微好一些,但仍然只使用了1个虚拟机。 – Vukasin