共用方式為


為何要進行增量串流處理?

現今的數據驅動企業會持續產生數據,這需要持續內嵌和轉換此數據的工程數據管線。 這些管線應該能夠處理和傳遞數據一次,產生延遲少於 200 毫秒的結果,並一律嘗試將成本降至最低。

本文說明工程數據管線的批次和累加串流處理方法、為什麼累加串流處理是更好的選項,以及開始使用 Databricks 累加串流處理供應專案、 Azure Databricks 上的串流處理,以及 什麼是 Delta 實時數據表?的後續步驟。 這些功能可讓您快速撰寫和執行管線,以確保傳遞語意、延遲、成本等等。

重複批次作業的陷阱

設定資料管線時,您一開始可能會撰寫重複的批次作業來內嵌您的資料。 例如,每小時您可以執行一個 Spark 作業,從來源讀取,並將數據寫入到像是 Delta Lake 的接收中。 這種方法的挑戰是以累加方式處理您的來源,因為每小時執行的Spark作業必須從最後一個作業結束的地方開始。 您可以記錄所處理資料的最新時間戳,然後選取時間戳比該時間戳還新的所有數據列,但有陷阱:

若要執行連續數據管線,您可以嘗試排程每小時批次作業,以累加方式從來源讀取、執行轉換,並將結果寫入接收,例如 Delta Lake。 這種方法可能會有陷阱:

  • 在時間戳之後查詢所有新數據的 Spark 作業將會遺漏延遲數據。
  • 如果未小心處理,失敗的Spark作業可能會導致完全一次的保證中斷。
  • 列出要尋找新檔案之雲端儲存位置內容的 Spark 作業會變得昂貴。

您仍然需要重複轉換此資料。 您可以撰寫重複的批次作業,以匯總您的數據或套用其他作業,進一步使管線效率複雜化並降低。

批次範例

若要完整瞭解管線批次擷取和轉換的陷阱,請考慮下列範例。

遺漏的數據

假設 Kafka 主題具有使用方式數據,可決定要向客戶收取多少費用,而您的管線正在批次內嵌,事件順序可能如下所示:

  1. 您的第一批在上午 8 點和上午 8:30 有兩筆記錄。
  2. 您將最新的時間戳更新為上午 8:30。
  3. 你得到另一個記錄在上午8:15。
  4. 您的第二批會在上午 8:30 之後查詢所有專案, 因此您錯過了上午 8:15 的記錄。

此外,您不想過度加壓或低估您的使用者,因此您必須確定您只擷取每筆記錄一次。

備援處理

接下來,假設您的數據包含使用者購買的數據列,而您想要匯總每小時的銷售量,讓您知道市集中最受歡迎的時間。 如果同一小時的購買專案會以不同的批次抵達,則您將會有多個批次來產生相同小時的輸出:

批次擷取範例

上午 8 點到上午 9 點的視窗是否有兩個元素(第 1 批的輸出)、一個元素(第 2 批的輸出),還是三個元素(沒有批次的輸出)? 產生指定時間範圍所需的數據會出現在多個轉換批次中。 若要解決此問題,您可以每天分割數據,並在需要計算結果時重新處理整個分割區。 然後,您可以覆寫接收中的結果:

批次擷取範例

不過,這會犧牲延遲和成本,因為第二個批次需要執行可能已經處理的數據不必要的工作。

累加數據流處理沒有陷阱

累加數據流處理可讓您輕鬆地避免重複批次作業的所有陷阱來內嵌和轉換數據。 Databricks 結構化串流和差異實時數據表會管理串流實作複雜度,讓您只專注於商業規則。 您只需要指定要連線的來源、應該對資料執行哪些轉換,以及寫入結果的位置。

累加擷取

Databricks 中的累加擷取是由 Apache Spark 結構化串流所提供,可累加地取用數據源並將它寫入接收。 結構化串流引擎可以完全取用數據一次,而且引擎可以處理順序錯亂的數據。 引擎可以在筆記本中執行,或使用差異實時數據表中的串流數據表。

Databricks 上的結構化串流引擎提供專屬串流來源,例如 AutoLoader,其可以以符合成本效益的方式累加處理雲端檔案。 Databricks 也為 Apache Kafka、Amazon KinesisApache PulsarGoogle Pub/Sub 等其他熱門訊息總線提供連接器。

累加轉換

Databricks 中具有結構化串流的累加轉換可讓您使用與批次查詢相同的 API 來指定 DataFrame 的轉換,但它會追蹤一段時間內的批次和匯總值的數據,讓您不必這麼做。 它永遠不需要重新處理數據,因此比重複的批次作業更快且更具成本效益。 結構化串流會產生可附加至接收的數據串流,例如 Delta Lake、Kafka 或任何其他支持的連接器。

差異實時數據表中的具體化檢視 是由酶引擎提供動力。 酶仍然以累加方式處理您的來源,但不產生數據流,而是建立 具體化檢視,這是預先計算的數據表,可儲存您提供給它的查詢結果。 酶能夠有效率地判斷新數據如何影響查詢的結果,並將預先計算的數據表保持在最新狀態。

具體化檢視會針對匯總建立檢視,一律有效率地更新本身,例如,在上述案例中,您知道上午 8 點到 9 點視窗有三個元素。

結構化串流或差異實時數據表?

結構化串流和差異實時數據表之間的顯著差異在於您運作串流查詢的方式。 在 [結構化串流] 中,您可以手動指定許多組態,而且您必須手動將查詢拼湊在一起。 您必須明確啟動查詢、等待查詢終止、在失敗時取消查詢,以及其他動作。 在 Delta Live Tables 中,您會以宣告方式為 Delta Live Tables 提供管線執行,並讓其持續執行。

差異實時數據表也有具體化檢視功能,可有效率且累加地預先計算數據的轉換。

如需這些功能的詳細資訊,請參閱 Azure Databricks 上的串流和 什麼是 Delta 實時數據表?

下一步