設定結構化串流觸發程式間隔
Apache Spark 結構化串流會累加處理數據;控制批處理的觸發間隔可讓您針對工作負載使用結構化串流,包括近乎即時的處理、每隔 5 分鐘或每小時重新整理資料庫一次,或批處理一天或一周的所有新數據。
由於 Databricks 自動載入器會使用結構化串流來載入數據,因此瞭解觸發程式的運作方式,可讓您在擷取所需頻率的數據時,擁有最大的彈性來控制成本。
指定以時間為基礎的觸發程式間隔
結構化串流會將以時間為基礎的觸發程式間隔稱為「固定間隔微批次」。 processingTime
使用 關鍵字,將時間持續時間指定為字串,例如 .trigger(processingTime='10 seconds')
。
當您指定 trigger
間隔太小(少於幾十秒)時,系統可能會執行不必要的檢查,以查看新數據是否已送達。 設定您的處理時間,以平衡延遲需求,以及數據抵達來源的速率。
設定累加批處理
重要
在 Databricks Runtime 11.3 LTS 和更新版本中, Trigger.Once
設定已被取代。 Databricks 建議您 Trigger.AvailableNow
用於所有累加批處理工作負載。
現在可用的觸發程式選項會以增量批次的形式取用所有可用的記錄,並能夠使用選項來設定批次大小,例如 maxBytesPerTrigger
(大小選項會因數據源而異)。
Azure Databricks 支援使用 Trigger.AvailableNow
從許多結構化串流來源進行累加批處理。 下表包含每個資料來源所需的最低支援 Databricks Runtime 版本:
來源 | 最低 Databricks 執行時間版本 |
---|---|
檔案來源 (JSON、Parquet 等) | 9.1 LTS |
Delta Lake | 10.4 LTS |
自動載入器 | 10.4 LTS |
Apache Kafka | 10.4 LTS |
Kinesis | 13.1 |
默認觸發程式間隔為何?
結構化串流預設為固定間隔微批次 500 毫秒。 Databricks 建議您一律指定量身訂做 trigger
,以將與檢查新數據是否已抵達並處理未調整批次相關的成本降到最低。
變更執行之間的觸發程式間隔
您可以使用相同的檢查點來變更執行之間的觸發間隔。
如果在處理微批次時結構化串流作業停止,該微批次必須在套用新的觸發間隔之前完成。 因此,您可能會在變更觸發程式間隔之後,觀察先前指定設定的微批處理。
從時間間隔移至使用 AvailableNow
時,這可能會導致在將所有可用記錄處理為累加批次之前進行微批次處理。
從 AvailableNow
移至以時間間隔為基礎的間隔時,這可能會導致繼續處理上 AvailableNow
一個作業觸發時可用的所有記錄。 這是預期行為。
注意
如果您嘗試從與累加批次相關聯的查詢失敗中復原,變更觸發程式間隔無法解決此問題,因為批次仍必須完成。 Databricks 建議相應增加用來處理批次的計算容量,以嘗試解決問題。 在極少數情況下,您可能需要使用新的檢查點重新啟動數據流。
什麼是連續處理模式?
Apache Spark 支援稱為「連續處理」的其他觸發間隔。 自Spark 2.3起,此模式已分類為實驗性模式;請洽詢您的 Azure Databricks 帳戶小組,以確保您了解此處理模型的取捨。
請注意,此連續處理模式完全與差異實時數據表中所套用的連續處理無關。