排解 Dataflow 中的瓶頸

如果某個步驟、階段或工作站導致整體工作速度變慢,就會發生瓶頸。瓶頸可能會導致工作站閒置,並增加延遲時間。

如果 Dataflow 偵測到效能瓶頸,工作圖表會顯示快訊,且「步驟資訊」面板會列出效能瓶頸的類型和原因 (如有)。Dataflow 也會將瓶頸偵測資訊匯出至 Stackdriver 指標,並以時間序列的形式呈現資料。這可讓您查看一段時間或過去的瓶頸。

瞭解瓶頸

Dataflow 執行串流管道時,工作會包含一系列元件,例如串流重組、使用者定義函式 (DoFn) 處理執行緒,以及持續性狀態檢查點。為方便資料流動,Dataflow 會使用佇列連結這些元件。資料會從上游推送至下游。

在許多管道中,整體輸送量容量會受到單一元件限制,在管道中形成瓶頸。資料通過瓶頸的速率會限制管道接受及處理輸入資料的速度。

舉例來說,假設管道中 DoFn 處理作業發生在串流隨機排序的下游。兩者之間的佇列會緩衝處理隨機排序但未經處理的資料。如果 DoFn 處理程序無法以串流隨機播放產生資料的速度使用資料,佇列就會變大。如果瓶頸持續存在,佇列可能會達到容量上限。此時,系統會暫停進一步隨機播放,並將積壓工作向上游傳播。上游佇列也會累積待處理項目,最終導致速度變慢,並延伸至資料來源,也就是說,整個管道無法跟上輸入內容。

發生效能瓶頸時,管道中可能會有相當多的部分顯示為不正常,即使管道中只有一個點造成積壓。這種行為可能會導致難以偵錯瓶頸。瓶頸偵測的目標是找出確切位置和原因,消除臆測,以便修正根本原因。

如果延遲時間超過五分鐘的門檻,Dataflow 就會偵測到瓶頸。如果延遲時間未超過這個門檻,Dataflow 就不會偵測到瓶頸。

偵測到瓶頸不一定需要採取行動,視您的用途而定。如果管道的暫時性延遲時間超過五分鐘,仍可正常運作。如果您的用途可以接受這種情況,可能就不需要解決所指出的瓶頸。

瓶頸類型

Dataflow 偵測到瓶頸時,監控介面會指出問題的嚴重程度。瓶頸可分為以下幾類:

處理作業停滯且無法繼續進行
管道進度會完全停止在這個步驟。
處理作業持續進行中,但進度落後。
管道無法快速處理傳入資料。因此待處理事項也隨之增加。
處理作業持續進行中,但有待處理的工作
管道正在處理資料,處理速率與輸入速率相當。處理速度夠快,待處理工作不會增加,但累積的待處理工作也不會大幅減少。
處理作業持續進行中,且即將進行待處理的工作
積壓工作正在減少,但目前的瓶頸阻礙了管道更快趕上進度。如果使用待處理項目啟動管道,這種狀態可能屬於正常情況,不需要任何介入措施。監控進度,看看積壓工作是否持續減少。

瓶頸成因

監控介面會顯示瓶頸的原因 (如果知道的話)。請參考這些資訊解決問題。

作業處理時間過長

計算作業的處理時間過長。只要輸入套件傳送至執行 DoFn 的工作站,且經過相當長的時間後仍未產生結果,就會發生這種情況。

這通常是使用者程式碼中單一長時間執行的作業所致。 其他問題可能會導致作業處理時間過長。舉例來說,DoFn 內擲回並重試的錯誤、長時間重試,或因 OOM 等因素導致工作執行緒當機,都可能造成處理時間過長。

如果受影響的運算位於使用者程式碼中,請設法最佳化程式碼或限制執行時間。為協助偵錯,工作站記錄會顯示停滯超過 5 分鐘的任何作業堆疊追蹤記錄。

緩慢的永續性狀態讀取

運算作業在執行 DoFn 時,會花費大量時間讀取持續性狀態。這可能是因為持續性狀態過大,或是讀取次數過多。建議您減少保存狀態大小或讀取頻率。這也可能是暫時性問題,因為基礎持續性狀態速度緩慢。

緩慢的永久狀態寫入

計算作業在提交處理結果時,花費大量時間寫入持續性狀態。這可能是因為持續性狀態過大所致。建議縮減保存狀態的大小。這也可能是暫時性問題,因為基礎持續性狀態緩慢。

遭拒的提交

資料處理無效,因此無法提交至持續性狀態。 這通常是因為超出其中一項作業限制。 如需更多詳細資料,請查看記錄檔,或與支援團隊聯絡

Apache Kafka 來源分區不足

Apache Kafka 來源運算的分區不足。如要解決這個問題,請嘗試下列做法:

  • 增加 Kafka 分區數量。
  • 使用 Redistribute 轉換,更有效率地重新分配資料並進行平行處理。

詳情請參閱「從 Apache Kafka 讀取資料到 Dataflow」頁面的「平行處理作業」。

來源平行處理量不足

來源運算平行處理量不足。如有可能,請增加來源中的平行化。如果無法增加平行化,且工作使用至少一次模式,請嘗試在管道中新增 Redistribute 轉換。

頻繁使用索引鍵或索引鍵平行處理量不足

作業有熱鍵或索引鍵平行處理量不足。

Dataflow 會依序處理每個分片鍵的訊息。 Dataflow 處理特定鍵的一批訊息時,該鍵的其他傳入訊息會排入佇列,直到目前批次處理完成為止。

如果 Dataflow 無法平行處理足夠的相異鍵,可能會造成瓶頸。舉例來說,資料可能只有少數幾個不同的鍵,或某些鍵在資料中過度呈現 (「熱鍵」)。詳情請參閱「排解工作緩慢或停滯的問題」。

vCPU 佈建不足

這項工作沒有足夠的工作站 vCPU。如果工作已擴充至上限,vCPU 使用率偏高,且仍有待處理工作,就會發生這種情況。

與 worker 通訊時發生問題

Dataflow 無法與所有工作站 VM 通訊。檢查工作 VM 的狀態。可能的原因包括:

  • 工作者 VM 的佈建作業發生問題。
  • 工作正在執行時,刪除工作站 VM 集區。
  • 網路問題。
Pub/Sub 來源平行處理量不足

Pub/Sub 來源運算使用的 Pub/Sub 金鑰數量不足。如果看到這則警告,請與支援團隊聯絡

Pub/Sub 來源因不明原因受到限制

從 Pub/Sub 讀取資料時,Pub/Sub 來源運算因不明原因受到限制。這個問題可能只是暫時性的。檢查 Pub/Sub 設定問題、缺少 IAM 權限或配額限制。不過,如果上述原因都不是根本原因,且問題仍未解決,請與支援團隊聯絡

Pub/Sub 接收器發布作業緩慢或停滯

Pub/Sub 接收器運算作業緩慢或停滯。這個問題可能是設定錯誤或配額限制所致。

工作佇列時間過長

由於金鑰數量龐大,且金鑰處理速度緩慢,因此最舊的合格工作年齡較高。在這種情況下,每項作業可能不會異常耗時,但整體排隊延遲時間很長。

Dataflow 會為每個分片索引鍵使用單一處理執行緒,且處理執行緒數量有限。排隊延遲時間約等於索引鍵與執行緒的比率,乘以索引鍵各個處理套件的執行緒內延遲時間:

(key count / total harness threads) * latency per bundle

請嘗試下列修正方法:

  • 增加工作站數量。請參閱「串流自動調度資源」。
  • 增加工作站控管執行緒數量。設定 numberOfWorkerHarnessThreads / number_of_worker_harness_threads 管道選項
  • 減少按鍵數量。
  • 縮短作業延遲時間。
Streaming Engine 後端發生暫時性問題

Streaming Engine 後端發生設定或運作問題。這個問題可能只是暫時性的。如果問題仍未解決,請與支援團隊聯絡

後續步驟