
传感器捕捉到一个包裹,在线模型能否及时用上这条变化?Databricks在10月29日宣布,实时模式已在Spark Declarative Pipelines中正式可用,让持续计算更直接地连接业务事件、在线特征和外部系统。这个进展不是Spark第一次出现实时模式,而是它进入声明式管线的正式交付阶段;速度之外,恢复和重复写入仍要由团队认真设计。
快速看点:实时模式让查询阶段并行推进、持续输出;默认五分钟的检查点间隔不等于数据要等五分钟才送出;Delta并非当前实时模式的通用输入输出;外部系统收到的重复行,也不会因为管线正式可用就自动消失。
传统微批把到达的数据分批处理。实时模式采用并行运行的查询阶段、流式数据交换和较长运行批次,让记录持续通过链路。它适合在线特征、个性化响应等对新鲜度敏感的路径,但不表示所有现有管线都只需打开一个开关。
当前配置要求使用持续运行管线,启用相应选项,并为目标sink的更新流指定实时触发方式。团队仍须核对源、转换和输出组合是否受支持,再判断它能否接入自己的AI应用,而不是先按演示延迟写服务承诺。
检查点决定故障时怎样找回处理位置。文档给出的默认间隔是五分钟:输出可持续发生,偏移和状态则周期性提交。缩短间隔会增加开销,拉长间隔可能扩大恢复工作量,并影响指标更新节奏。检查点周期不能直接当成端到端延迟,也不能单凭它承诺外部业务恰好执行一次。
当前支持的输入包括Kafka及兼容接口、AWS MSK等;Kinesis轮询读取还要求相应运行时版本。值得特别注意的是,Delta目前不是实时模式支持的源或sink。需要依赖Delta中间表的方案,不能照搬普通管线结构后便宣称已经全链路实时化。
转换也有边界:流与静态数据连接需符合广播连接条件,流与流连接、会话窗口及forEachBatch等并非当前实时模式通用支持项。需求评审应先核对这些限制,再决定是调整数据模型,还是保留部分微批路径。
实时计算还需要同时给多个阶段分配运行槽位。当前通道对单流布局更直接,多流可以运行,但会竞争资源并增加延迟。文档另列仅在Serverless预览通道提供的多流槽位预留和输入分区自适应Beta能力;不能把正式可用公告理解为这些辅助能力全部同步正式可用。
自适应也不是所有并行参数都自动调优。文档明确,shuffle分区不会因此自动调整,显式设置部分源分区选项还会关闭对应自适应行为。资源、数据倾斜与外部吞吐仍可能成为瓶颈,需要用自己的负载验收。
ForEach sink提供逐行函数或writer接口,可把结果送到外部API、键值系统等目标。代码在执行器上运行,不是在Driver上集中执行;writer的process必须实现,open和close则可选。外部服务的限流、错误响应与连接方式,也会反过来影响整条链路。
失败重试可能把同一行再次交给写入代码。更新流还可能对同一个键给出新的值,因此应用通常需要按业务语义更新或覆盖,而不是无条件追加。所谓“管线恢复成功”,不能只看任务重新运行,还要检查外部目的地是否出现重复或旧值。
分区标识和epoch标识也不能随意充当全局业务去重键。它们的唯一性只在同一流、同一检查点范围内成立,多条流或完整刷新后可能重复。更稳妥的设计应结合业务事件身份、版本和目的地的幂等规则,不能由一个执行批次编号包办。
完整刷新会重置流的检查点,但不会替团队清空外部目的地。历史数据如何保留、旧记录如何清理、重复数据怎样处理,都要由应用负责;ForEach的行数指标也有不报告的限制。本站没有创建云资源或复跑性能测试,不采用厂商延迟或提速倍数作为生产效果证明。
实时模式正式进入声明式管线,降低了构建低延迟数据路径的工程门槛。但企业AI真正依赖的是“及时且可信地更新”,不是单次最快记录。把检查点、资源竞争、重复投递与外部清理写进验收清单,才能让实时特征服务于业务,而不是让更快的数据流放大恢复时的混乱。
