结构化流:Apache Spark中用于实时应用程序的声明性API
摘要
随着实时数据的普及,组织需要可扩展的、易于使用的、易于集成到业务应用程序中的流系统。结构化流是Apache Spark中一个新的高级流API,基于我们使用Spark流的经验。结构化流与其他最近的流api(如谷歌Dataflow)有两个主要区别。首先,它是一个纯粹的声明性API,基于自动递增静态关系查询(使用SQL或dataframe表示),而不是要求用户构建物理操作符的DAG的API。其次,结构化流旨在支持端到端实时应用程序,将流与批处理和交互式分析集成在一起。我们发现这种集成在实践中经常是一个关键的挑战。结构化流通过Spark SQL的代码生成引擎实现高性能,可以比Apache Flink和Apache Kafka Streams的性能分别高出2倍和90倍。它还提供了丰富的操作特性,如回滚、代码更新和混合流/批处理执行。我们描述了来自Databricks上数百个生产部署的系统设计和用例,其中最大的一个每月处理超过1pb的数据。