计算引擎基础篇:批处理、流处理与 SQL 计算

计算引擎负责把数据从原始形态加工成指标、宽表、报表和模型特征,是消息队列与数据库之间的计算层。

计算引擎基础篇:批处理、流处理与 SQL 计算

如果说消息队列负责让数据流动,数据库负责让数据存储和查询,那么计算引擎负责把数据加工成业务真正需要的形态。

日志要清洗,订单要汇总,用户行为要计算留存,实时事件要聚合成指标,数据湖里的明细要产出报表。这些工作通常不会直接放在业务数据库里做,而是交给 Spark、Flink、Hive、Trino 这类计算引擎。

Rendering diagram...

计算引擎解决什么问题

第一是规模。单机程序处理几 GB 数据还可以,处理 TB 或 PB 级数据就需要分布式计算。

第二是表达能力。SQL、DataFrame、DataStream、DAG 这些接口让工程师可以表达复杂的数据处理逻辑。

第三是容错。分布式计算中机器会失败,计算引擎要能重试任务、恢复状态、保证结果尽量正确。

第四是资源治理。大量计算任务共享集群,需要调度 CPU、内存、网络和磁盘。

批处理和流处理

批处理面对的是有边界的数据。比如每天凌晨处理昨天的订单和日志。

流处理面对的是不断到来的数据。比如用户点击、支付事件、监控指标。

批处理:昨天所有订单 -> 计算日 GMV
流处理:每条支付事件 -> 实时更新分钟级 GMV

Spark 最早以批处理和内存计算出名,Flink 则以流处理和有状态计算见长。今天两者都在向流批一体靠近,但工程侧重点仍然不同。

SQL 计算

很多数据处理最终会回到 SQL。Spark SQL、Flink SQL、Hive SQL、Trino SQL 都是在用 SQL 表达数据加工和分析。

SQL 的好处是门槛低、表达统一、方便治理。缺点是复杂逻辑、状态计算和低延迟处理有时需要更底层的 API。

和数据库的关系

计算引擎不是数据库。数据库更强调存储、索引和查询服务;计算引擎更强调大规模数据加工和任务执行。

但边界会重叠。Spark SQL 能查表,Trino 能做交互式查询,Flink SQL 能做实时聚合,OLAP 数据库也能做部分计算。真实系统里,关键是让每层做自己擅长的事情。

小结

计算引擎是数据基础设施里的加工层。它连接上游消息、日志、数据库和数据湖,也连接下游报表、指标、OLAP 和机器学习。

理解计算引擎,先抓住三件事:批处理、流处理、SQL 计算。

参考链接