本頁說明如何在 Azure Databricks 上設定結構化串流的觸發間隔。
Apache Spark 結構化串流以增量方式處理資料。 觸發間隔控制結構化串流檢查新資料的頻率。 你可以設定觸發間隔以進行近即時處理、排程資料庫刷新,或批次處理一天或一週所有新資料。
因為 什麼是自動載入器? 使用結構化串流來載入資料,了解觸發器的運作方式能讓你在以理想頻率接收資料的同時,擁有最大的彈性來控制成本。
重要
Azure Databricks 建議你設定一個觸發模式,根據你的使用情境平衡延遲和成本。 否則,你可能會看到雲端供應商帶來意想不到的儲存費用。 詳情請參見 控制雲端儲存成本 。
觸發模式概述
下表總結了結構化串流中可用的觸發模式:
| 觸發模式 | 語法範例(Python) | 適用對象 |
|---|---|---|
| 未指定(預設) | N/A | 通用串流,延遲約 3-5 秒。 相當於 0 毫秒間隔的 ProcessingTime 觸發。 只要有新資料到達,串流處理就會持續運作。 |
| 處理時間 | .trigger(processingTime='10 seconds') |
平衡成本與效能。 透過防止系統過度頻繁檢查資料來降低開銷。 |
| 現已上市 | .trigger(availableNow=True) |
排程增量批次處理。 在串流作業被觸發時,處理當前可用的所有數據。 |
| 即時模式 | .trigger(realTime='5 minutes') |
超低延遲的營運工作負載,需要亞秒級處理,例如詐欺偵測或即時個人化。 公開預覽。 「5分鐘」表示微型批次的長度。 利用 5 分鐘來減少每批次的額外負擔,例如查詢編譯。 |
| 連續的 | .trigger(continuous='1 second') |
不支援。 這是 Spark OSS 內建的一項實驗性功能。 建議改用即時模式。 |
:::note 無伺服器運算
在無伺服器運算中,僅支援 Trigger.AvailableNow() 和 Trigger.Once()。 Databricks 建議 Trigger.AvailableNow()。
在無伺服器運算中,以連續模式使用觸發模式與連續流水線模式。
請參閱 串流限制。
:::
處理時間:基於時間的觸發間隔
結構化串流將基於時間的觸發間隔稱為「固定間隔微批次」。 使用processingTime關鍵字,將時間持續時間以字串的形式指定,例如.trigger(processingTime='10 seconds')。
此區間的配置決定系統執行檢查頻率以確認是否有新資料抵達。 設定您的處理時間,以平衡延遲需求,以及數據抵達來源的速率。
AvailableNow:增量批次處理
重要
在 Databricks Runtime 11.3 LTS 及以上版本中,Trigger.Once 已被棄用。 使用 Trigger.AvailableNow 處理所有增量批次工作負載。
AvailableNow觸發選項會以增量批次形式消耗所有可用紀錄,並能以如 等選項maxBytesPerTrigger設定批次大小。 尺寸選項會依資料來源而異。
支持的數據源
Azure Databricks 支援使用 Trigger.AvailableNow 進行來自多個結構化串流來源的增量批次處理。 下表包含每個資料來源所需的最低支援 Databricks Runtime 版本:
| 來源 | Databricks 執行時間最低版本 |
|---|---|
| 檔案來源 (JSON、Parquet 等) | 9.1 LTS |
| 三角洲湖 | 10.4 LTS |
| 自動載入器 | 10.4 LTS |
| Apache Kafka | 10.4 LTS |
| 動力學 | 13.1 |
即時:超低延遲作業負載
結構化串流的即時模式在尾端延遲低於 1 秒,常見情況下約為 300 毫秒。 欲了解如何有效配置與使用即時模式,請參閱 結構化串流中的即時模式。
Apache Spark 還有一個額外的觸發間隔,稱為 連續處理(Continuous Processing)。 自 Spark 2.3 起,此模式被歸類為實驗性模式。 Azure Databricks 不支援也不推薦此模式。 低延遲使用時,建議改用即時模式。
注意
本頁的連續處理模式與 Lakeflow Spark 宣告式管線中的連續處理無關。
控制雲端儲存成本
預設情況下,如果你沒有設定觸發模式,結構化串流會將觸發模式設為 processingTime ,間隔設為 0,每隔幾毫秒檢查一次新資料。 這可能產生大量雲端儲存 API 呼叫,並導致雲端供應商意外收費。
Databricks 建議你設定一個適合延遲與成本需求的觸發模式。 請參閱 processingTime 有關設定基於時間的觸發間隔的資訊。
在運行間更改觸發間隔
您可以使用相同的檢查點來變更執行之間的觸發間隔。
改變音程時的行為
如果在處理微批次時結構化串流作業停止,該微批次必須在套用新的觸發間隔之前完成。 因此,在改變觸發間隔後,你可能會看到微批處理,依照原先指定的設定進行。 以下描述了轉換過程中預期的行為:
從時間基礎區間轉換到
AvailableNow: 微批次可能會先處理所有可用紀錄,作為增量批次。從
AvailableNow轉換到基於時間的間隔: 處理可能會繼續按照上次AvailableNow工作觸發時的所有可用紀錄繼續。 這是預期行為。
從查詢失敗中恢復
注意
如果你想從增量批次相關的查詢失敗中恢復,改變觸發間隔無法解決這個問題,因為批次還是必須完成。 擴充處理批次的運算能力,嘗試解決問題。 在極少數情況下,您可能需要使用新的檢查點重新啟動數據流。