我有一個具有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