Arroyo:基于Arrow和DataFusion的新SQL引擎

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

Arroyo 0.10是一个基于Apache Arrow和DataFusion构建的新型SQL引擎,提供了改进的性能、简化的架构和与其他数据系统的无缝集成。与Arroyo 0.9相比,Arroyo 0.10在吞吐量、管道启动速度和Docker镜像大小方面都有显著改进。文章还讨论了Arroyo的灵感来源、选择Rust作为编程语言以及添加SQL功能的决策。文章最后解释了列式表示和批处理在流引擎中的优势。

🔎

延伸解读

从0.9到0.10:性能提升背后的架构简化

Arroyo 0.10相比0.9在吞吐量上提升3倍,管道启动速度提升20倍,Docker镜像大小减少11倍。这些改进源于用基于Arrow和DataFusion的SQL引擎替换了原先需要动态编译Rust代码的复杂架构。新版本作为单个紧凑二进制文件,部署更简单,同时保持了高性能。

为什么流引擎需要列式与批处理

传统流引擎逐事件处理,但列式表示和批处理能大幅提升吞吐量。文章指出,在高数据量下,批处理可以兼顾高吞吐和低延迟;而在低数据量下,小批量带来的开销总体成本也很小。Arroyo采用列式内存格式,利用现代CPU的矢量处理能力,实现了与批处理引擎竞争的性能。

SQL层设计:复用DataFusion前端

Arroyo没有从头构建SQL引擎,而是采用DataFusion的前端进行解析、规划和优化,再将逻辑图转换为自己的数据流表示。这与Flink SQL使用Calcite的方式类似。这样做降低了开发复杂度,并让数据工程师和科学家能更轻松地构建流管道,无需深入掌握流处理系统知识。

❓

Q&A

Arroyo 0.10相比于0.9有哪些性能改进?

Arroyo 0.10的吞吐量提高了3倍,管道启动速度提高了20倍,Docker镜像大小减少了11倍。

Arroyo的灵感来源是什么?

Arroyo的灵感来源于开发Apache Flink的经历,旨在用Rust语言实现更高性能的流处理。

为什么选择Rust作为Arroyo的编程语言?

选择Rust是为了实现更高性能的流处理,并修复Flink的一些缺点,特别是在状态管理方面。

Arroyo如何实现SQL功能?

Arroyo使用DataFusion作为SQL引擎的前端,通过解析、规划和优化SQL来实现SQL功能。

列式表示和批处理在流引擎中有什么优势?

列式表示和批处理可以提高吞吐量并减少延迟,特别是在处理高数据量时。

Arroyo的架构有什么特点?

Arroyo的架构简单,生成Rust代码并编译成单个紧凑的二进制文件,便于部署。

🏷️

标签

➡️

继续阅读