Structured Streaming 编程指南
概览
Structured Streaming 是一个可扩展、容错的流处理引擎,构建于 Spark SQL 引擎之上。您可以用与表达静态数据上的批处理计算相同的方式来表达流式计算。Spark SQL 引擎将负责递增地、持续地运行它,并在流数据不断到达时更新最终结果。您可以使用 Scala、Java、Python 或 R 中的 Dataset/DataFrame API 来表达流式聚合、事件时间窗口、流到批连接等。计算在相同的优化 Spark SQL 引擎上执行。最后,系统通过检查点(checkpointing)和预写日志(Write-Ahead Logs)确保端到端精确一次(exactly-once)的容错保证。简而言之,Structured Streaming 提供了快速、可扩展、容错、端到端精确一次的流处理,而用户无需考虑流的细节。
在内部,默认情况下,Structured Streaming 查询使用微批处理引擎进行处理,该引擎将数据流处理为一系列小批次作业,从而实现低至 100 毫秒的端到端延迟和精确一次的容错保证。然而,自 Spark 2.3 以来,我们引入了一种新的低延迟处理模式,称为连续处理(Continuous Processing),它可以实现低至 1 毫秒的端到端延迟,并提供至少一次(at-least-once)的保证。您无需更改查询中的 Dataset/DataFrame 操作,即可根据应用程序需求选择模式。
在本指南中,我们将带您了解编程模型和 API。我们将主要使用默认的微批处理模型来解释概念,然后稍后讨论连续处理模型。首先,让我们从 Structured Streaming 查询的一个简单示例——一个流式词频统计开始。