迁移指南:结构化流处理
请注意,此迁移指南描述了特定于结构化流的项目。 在将结构化流迁移到更高版本时,可以应用许多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中,当使用基于文件的数据源如文本、json、csv、parquet和orc通过
spark.readStream(...)时,结构化流强制源模式为可为空。之前,它遵循源模式中的可空性;然而,这导致了难以调试的NPE问题。要恢复之前的行为,请将spark.sql.streaming.fileSource.schema.forceNullable设置为false。 -
Spark 3.0修复了Stream-stream外连接的正确性问题,这改变了状态的模式。(有关更多详细信息,请参见 SPARK-26154 )。如果您从使用stream-stream外连接的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。