AB
AiBoss
News

Databricks 为 Spark 结构化流推出按需状态重分区

Databricks 宣布 Apache Spark 结构化流按需状态重分区进入公开预览,可在保留检查点状态的前提下调整有状态流查询的分区数,需 DBR 18 及以上与 RocksDB 状态存储。

核心事实

Databricks 发布博客,宣布在 Databricks 平台上为 Apache Spark 结构化流(Structured Streaming)推出按需状态重分区(On-Demand State Repartitioning),目前处于公开预览阶段。据该博客说明,该能力允许用户在有状态流查询运行期间调整状态分区数量,而无需重建检查点或丢失已累积的状态。使用方式为设置 spark.sql.streaming.stateStore.partitions 并重启查询,查询会先将状态数据物理重分布到新的分区数,再恢复常规处理。

背景与影响

博客解释,此前分区数在检查点创建时即被固定,之后修改 spark.sql.shuffle.partitions 不会生效;若想改变分区数,只能放弃原有检查点重新开始,对有状态查询而言意味着丢失全部状态。新机制针对聚合、流与流连接、去重、会话化以及 transformWithState 等有状态场景。博客提到,采用方 Coveo 表示借此将其相关 Amazon S3 API 成本降低了 40%,该数据来自厂商博客引述,尚未获独立验证。博客还称,重分区耗时与状态规模相关,可通过查询进度指标中 controlBatch.REPARTITIONdurationMs 观察,多数工作负载预计只需数秒。

限制与来源

据博客说明,使用前提为 Databricks Runtime 18 及以上版本,并使用 RocksDB 状态存储;DBR 17.3 及以上默认使用 RocksDB。该功能目前为公开预览,具体可用范围、区域与计费方式请以 Databricks 官网当前信息为准。本文内容整理自 Databricks 官方博客,未做独立测试,文中性能与成本表述均为原博客说法。