串流管道

不受限的 PCollections 或不受限的「集合」,代表串流管道中的資料。不受限集合包含來自持續更新資料來源 (例如 Pub/Sub) 的資料。

您無法只使用鍵,將無界限集合中的元素分組。在串流資料中,特定鍵的元素數量可能無限多,因為資料來源會不斷新增元素。您可以使用視窗浮水印觸發條件,匯總無界限集合中的元素。

時間區間的概念也適用於代表批次管道中資料的受限 PCollection。如要瞭解批次管道中的時間區間設定,請參閱 Apache Beam 說明文件中的時間區間設定與受限的 PCollection

如果 Dataflow 管道有受限資料來源 (也就是不含持續更新資料的來源),且管道使用 --streaming 標記切換為串流模式,當受限來源完全耗用完畢時,管道就會停止執行。

使用串流模式

如要在串流模式下執行管道,請在執行管道時,於指令列中設定 --streaming 標記。您也可以在建構管道時以程式輔助方式設定串流模式。

串流模式不支援批次來源。

使用更大的工作站集區更新管道時,串流工作可能無法如預期擴充資源。針對不使用 Streaming Engine 的串流工作,原始工作在開始時所分配的原始工作站數量以及永久磁碟資源就是可擴充的工作站數量上限。當您更新 Dataflow 工作,並在新工作中指定數量更多的工作站時,您指定的工作站數量必須等於您為原始工作指定的工作站數量上限。

使用下列標記指定工作站數量上限:

Java

--maxNumWorkers

Python

--max_num_workers

Go

--max_num_workers

時間區間和時間區間函式

時間區間函式會將不受限的集合劃分成邏輯元件,也就是「時間區間」。時間區間設定函式會根據個別元素的時間戳記,將不受限集合分組。每個時間區間都包含有限數量的元素。

您可以使用 Apache Beam SDK 設定下列視窗:

滾動式時間區間

滾動式時間區間是資料串流中穩定一致的不相交時間間隔。

舉例來說,如果設定為 30 秒的滾動時間視窗,時間戳記值為 [0:00:00-0:00:30) 的元素會位於第一個時間視窗。時間戳記值為 [0:00:30-0:01:00) 的元素位於第二個時間區間。

下圖說明元素如何劃分為 30 秒的滾動時間窗。

時間長度為 30 秒的滾動式時間區間圖片

跳躍式時間區間

跳躍式時間區間是資料串流中穩定一致的時間間隔。跳躍式時間區間可以重疊,但滾動式時間區間不會重疊。

舉例來說,跳躍式時間區間可以每隔三十秒開始擷取一分鐘的資料。跳躍式時間區間開始的頻率稱為「期間」。這個範例的時間區間為一分鐘,期間為三十秒。

下圖說明如何將元素劃分為一分鐘的跳躍式時間區間,期間為三十秒。

時間區間長度為 1 分鐘、期間為 30 秒的跳躍式時間區間圖片

如要取得資料的移動平均,請使用跳躍式時間區間。您可以使用一分鐘的跳躍式時間區間,每隔三十秒計算一次一分鐘的移動平均。

工作階段時間區間

工作階段時間區間會包含另一個元素的間隔時間長度中的元素。間隔時間是指資料串流中新資料之間的時間間隔。如果資料在間隔時間後抵達,系統會將資料指派給新時間區間。

舉例來說,工作階段時間區間可以分割代表使用者滑鼠活動的資料串流。這個資料串流可能會有較長的閒置時間,中間穿插許多點擊。工作階段視窗可以包含點擊產生的資料。

工作階段時間區間設定會為每個資料鍵指派不同的時間區間。滾動式和跳躍式時間區間會包含指定時間間隔內的所有元素,不論資料鍵為何。

下圖顯示元素如何劃分為工作階段時間區間。

有最短間隔時間長度的工作階段時間區間圖片

浮水印

「浮水印」是一種門檻,表示 Dataflow 預期時間區間中的所有資料抵達的時間。如果浮水印已超過時間區間結尾,且新資料抵達時的時間戳記位於該時間區間內,則該資料會被視為延遲資料。詳情請參閱 Apache Beam 說明文件中的「Watermarks and late data」(浮水印和延遲資料)。

Dataflow 會追蹤水位線,原因如下:

  • 無法保證資料能依時間順序或依可預測的時間間隔抵達。
  • 資料事件不保證會以產生的順序顯示在管道中。

資料來源會決定浮水印。您可以使用 Apache Beam SDK 允許延遲資料

觸發條件

「觸發條件」可用來決定資料到達時發送匯總結果的時機。根據預設,系統會在浮水印通過時間區間結尾時發送結果。

您可以使用 Apache Beam SDK,為串流管道中的每個集合建立或修改觸發條件。

Apache Beam SDK 可設定觸發條件,在下列條件的任意組合下運作:

  • 事件時間,如每個資料元素上的時間戳記所示。
  • 處理時間:資料元素在管道中任何階段進行處理的時間。
  • 集合中的資料元素數量。

後續步驟