2017-05-22 24 views
2

我試圖在我的數據流作業中啓用自動調節功能,如this article中所述。我這樣做,由通過下面的代碼的相關算法設置:Google雲數據流中的自動調節功能未按預期工作

DataflowPipelineOptions options = PipelineOptionsFactory.as(DataflowPipelineOptions.class); 

options.setAutoscalingAlgorithm(AutoscalingAlgorithmType.THROUGHPUT_BASED) 

我設置和部署我的工作後,它始終以最大的作品。可用的CPU數量,即如果我將最大工作數設置爲10,那麼它將使用全部10個CPU,儘管平均CPU使用率約爲50%。 THROUGHPUT_BASED算法是如何工作的以及我犯的錯誤是什麼?

謝謝。

+0

雖然你想達到什麼目前尚不清楚。 100%的CPU利用率? –

+0

我從Pub/Sub訂閱中收到一些事件,有時會增加事件數量,例如週末。所以,我希望我的數據流作業能夠自適應地趕上所有事件,而無需延遲。在這種情況下,當我手動設置5個工作人員的數量時,沒有延遲,CPU使用率爲〜90%,這就是爲什麼運行10個CPU應該不合邏輯的原因。 – Ali

+0

似乎完全的目標是作爲_「目標是最大限度地減少積壓,同時最大限度地提高工作人員的利用率和吞吐量,並快速響應負載尖峯。」_。可能在90%的CPU使用率下,要處理的數據積壓對於數據流來說太大了。所以它選擇了更多的機器,這些機器使用得更少,所以積壓量更小。 –

回答

2

雖然Autoscaling試圖減少積壓和CPU,但積壓減少優先。特定值積壓很重要,Dataflow計算'積壓在幾秒鐘內'大致爲'積壓/吞吐量',並且試圖將其保持在10秒以下。

就你而言,我認爲防止從10降尺度的原因是有關用於管道執行的永久磁盤(PD)的策略。當最大工作人員數爲10時,Dataflow使用10個永久性磁盤,並隨時嘗試保持工作人員數量,以使這些磁盤大致平均分配。因此,當管道的最大工作量爲10時,它將嘗試縮減到5而不是7或8。此外,它會在縮小後保持投影CPU不超過80%。

這兩個因素可能會有效地防止您的情況下降尺度。如果10名工作人員的CPU利用率爲50%,5名工人的預計CPU利用率爲100%,所以它不會下降,因爲它高於目標80%。

Google Dataflow正在開發新的執行引擎,它不依賴於永久磁盤,並且不受縮小比例的限制。

解決此問題的方法是設置更高的max_workers,並且您的管道可能仍然保持在10或更低。但是,這導致了PD的成本的小幅增加。

另一個遙遠的可能性是,有時甚至在升級後估計的「積壓秒數」可能不會保持在10秒以下,即使有足夠的CPU。這可能是由於各種因素(用戶代碼處理,pubsub批處理等)。希望聽到這是否影響您的管道。