迁移指南:Structured Streaming
请注意,本迁移指南描述了 Structured Streaming 特有的项目。在将 Structured Streaming 迁移到更高版本时,许多 SQL 迁移项目也适用。请参阅 迁移指南:SQL, Datasets 和 DataFrame。
从 Structured Streaming 3.5 升级到 4.0
- 自 Spark 4.0 起,如果查询中的任何源不支持
Trigger.AvailableNow
,Spark 将退回到单批次执行。这是为了避免因源和包装器实现不兼容而可能导致的任何正确性、重复和数据丢失问题。(详情请参阅 SPARK-45178)。 - 自 Spark 4.0 起,新配置
spark.sql.streaming.ratioExtraSpaceAllowedInCheckpoint
(默认值:0.3
)控制检查点目录中允许的额外空间量,用于在维护任务中存储过时版本文件以进行批次删除。这是为了分摊云存储中的列表成本。将其设置为0
将恢复旧行为。(详情请参阅 SPARK-48931)。 - 自 Spark 4.0 起,当在
DataStreamWriter
中使用相对路径输出数据时,解析为绝对路径的操作在 Spark Driver 中完成,而不会延迟到 Spark Executor。这是为了使 Structured Streaming 的行为类似于 DataFrame API (DataFrameWriter
)。(详情请参阅 SPARK-50854)。 - 自 Spark 4.0 起,已弃用的配置
spark.databricks.sql.optimizer.pruneFiltersCanPruneStreamingSubplan
已被移除。(详情请参阅 SPARK-51187)。
从 Structured Streaming 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。更多详情请参阅 Structured Streaming Kafka 集成。
从 Structured Streaming 3.2 升级到 3.3
- 自 Spark 3.3 起,所有有状态操作都需要使用精确分组键进行哈希分区。在以前的版本中,除流-流连接外的所有有状态操作都要求宽松的分区标准,这可能会导致正确性问题。(详情请参阅 SPARK-38204)。为了确保向后兼容性,我们保留了使用旧版本构建的检查点的旧行为。
从 Structured Streaming 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
的偏移量获取机制。更多详情请参阅 Structured Streaming Kafka 集成。
从 Structured Streaming 2.4 升级到 3.0
-
在 Spark 3.0 中,当通过
spark.readStream(...)
使用基于文件的(例如 text, json, csv, parquet 和 orc)数据源时,Structured Streaming 会强制将源模式设置为可空。以前,它会尊重源模式中的可空性;然而,这导致了 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
。