本文来源于数据从业者全栈知识库,更多体系化内容请访问知识库。
为什么要做计算引擎选型
数据领域的计算引擎可以说是整个数据平台的”发动机”。选错引擎,轻则性能低下、维护困难,重则整个架构推倒重来。但初入行的同学面对 Spark、Flink、Presto/Trino 这些名字时,往往不知道该如何下手。
没有”最好”的计算引擎,只有”最合适”的。三种引擎解决的是不同场景下的问题,在成熟的大数据平台中,它们往往共存而非互相取代。
三大引擎速览
| 引擎 | 诞生背景 | 核心定位 | 当前主导版本 |
|---|---|---|---|
| Apache Spark | 2009 年 UC Berkeley AMPLab,解决 Hadoop MapReduce 慢的问题 | 统一批流处理、机器学习 | Spark 3.5.x |
| Apache Flink | 2014 年柏林工业大学,原生流处理思维 | 有状态流计算、低延迟实时处理 | Flink 1.19.x |
| Presto / Trino | 2012 年 Facebook,解决 Hive 查询太慢的问题 | 交互式即席查询(Ad-hoc Query) | Trino 435+ |
Trino 是 Presto 的”分支续作”。2020 年原 Facebook Presto 核心团队离开后创建了 PrestoSQL,随后更名为 Trino。目前 Trino 社区更活跃,功能迭代更快;而 PrestoDB 依然由 Meta 在维护。两者 SQL 语法高度兼容,选型时可视为同类产品。
核心维度对比
综合能力矩阵
| 对比维度 | Spark | Flink | Presto/Trino |
|---|---|---|---|
| 批处理能力 | ★★★★★ | ★★★★ | ★★★ |
| 流处理能力 | ★★★★ | ★★★★★ | ★ |
| 交互式查询 | ★★★ | ★★ | ★★★★★ |
| 机器学习 | ★★★★★ | ★★★ | ★ |
| 状态管理 | ★★★ | ★★★★★ | ★ |
| 学习曲线 | 中等 | 较陡 | 平缓 |
| 运维复杂度 | 中等 | 较高 | 中等 |
| 社区活跃度 | ★★★★★ | ★★★★★ | ★★★★ |
场景适用性速查
| 典型场景 | 推荐引擎 | 次选 |
|---|---|---|
| 离线数据仓库 ETL | Spark | Hive on Spark |
| 实时流处理(金融风控、日志分析) | Flink | Spark Structured Streaming |
| 数据分析师临时查询 | Presto/Trino | Spark SQL |
| 机器学习特征工程 | Spark MLlib | — |
| 实时数据湖写入 | Flink | Spark Streaming |
| 多数据源联邦查询 | Presto/Trino | — |
| 近实时数仓(5~10 分钟延迟可接受) | Spark Structured Streaming | Flink |