遷移指南:結構化串流
請注意,此遷移指南說明了結構化串流的特定項目。在將結構化串流遷移到較高版本時,可以套用許多 SQL 遷移項目。請參閱 遷移指南:SQL、資料集和資料框。
從結構化串流 3.3 升級到 3.4
-
自 Spark 3.4 起,
Trigger.Once
已棄用,建議使用者從Trigger.Once
遷移至Trigger.AvailableNow
。有關更多詳細資訊,請參閱 SPARK-39805。 -
自 Spark 3.4 起,Kafka 位移擷取組態的預設值 (
spark.sql.streaming.kafka.useDeprecatedOffsetFetching
) 已從true
變更為false
。預設值不再依賴於消費者群組排程,這會影響所需的 ACL。有關更多詳細資訊,請參閱 結構化串流 Kafka 整合。
從結構化串流 3.2 升級到 3.3
- 自 Spark 3.3 起,所有有狀態運算子都需要雜湊分割以及精確的群組金鑰。在先前版本中,除了串流串流聯結之外,所有有狀態運算子都需要寬鬆的分割準則,這可能會導致正確性問題。(有關更多詳細資訊,請參閱 SPARK-38204。)為了確保向後相容性,我們保留了從舊版本建立的檢查點的舊行為。
從結構化串流 3.0 升級到 3.1
-
在 Spark 3.0 及之前版本中,對於具有有狀態運算的查詢,這些運算可能會發出比目前浮水印加上允許的延遲記錄時間更舊的列,這些列在下游有狀態運算中為「延遲列」,且這些列可能會被捨棄,Spark 只會印出警告訊息。自 Spark 3.1 起,Spark 會檢查此類查詢是否有可能發生的正確性問題,並預設為它擲回 AnalysisException。對於了解正確性問題的可能風險且仍決定執行查詢的使用者,請透過將組態
spark.sql.streaming.statefulOperator.checkCorrectness.enabled
設定為 false 來停用此檢查。 -
在 Spark 3.0 及之前的版本中,Spark 使用
KafkaConsumer
來擷取偏移量,這可能會導致驅動程式無限等待。在 Spark 3.1 中,新增了一個設定選項spark.sql.streaming.kafka.useDeprecatedOffsetFetching
(預設值:true
),可以將其設定為false
,讓 Spark 能夠使用新的偏移量擷取機制,並使用AdminClient
。如需進一步的詳細資訊,請參閱 結構化串流 Kafka 整合。
從結構化串流 2.4 升級到 3.0
-
在 Spark 3.0 中,結構化串流會在透過
spark.readStream(...)
使用基於檔案的資料來源(例如文字、json、csv、parquet 和 orc)時,強制將來源架構設定為可為空。之前,它會尊重來源架構中的可為空性;但是,它會導致難以透過 NPE 除錯的問題。若要還原先前的行為,請將spark.sql.streaming.fileSource.schema.forceNullable
設定為false
。 -
Spark 3.0 修復了串流串流外部聯結的正確性問題,這會變更狀態的架構。(如需更多詳細資訊,請參閱 SPARK-26154)。如果您從使用串流串流外部聯結的 Spark 2.x 建構的檢查點開始查詢,Spark 3.0 會讓查詢失敗。若要重新計算輸出,請捨棄檢查點並重新播放先前的輸入。
-
在 Spark 3.0 中,已移除不建議使用的類別
org.apache.spark.sql.streaming.ProcessingTime
。請改用org.apache.spark.sql.streaming.Trigger.ProcessingTime
。同樣地,org.apache.spark.sql.execution.streaming.continuous.ContinuousTrigger
已被移除,建議改用Trigger.Continuous
,而org.apache.spark.sql.execution.streaming.OneTimeTrigger
已被隱藏,建議改用Trigger.Once
。