实时 OLAP 选型
概述
实时 OLAP 选型取决于查询模式与并发:实时报表重预聚合、Ad-hoc 重灵活性、大屏重低延迟、即席分析重吞吐。本文按场景给出选型依据与架构设计方案,并给出多引擎组合的典型架构。
一、场景分类
| 场景 | 特点 | 核心诉求 |
|---|---|---|
| 实时报表 | 固定维度 | 预聚合、稳定 |
| Ad-hoc 查询 | 任意维度 | 灵活、快 |
| 大屏 | 高并发小查询 | 低延迟 |
| 即席分析 | 大查询 | 吞吐、容错 |
| 实时大屏 | 秒级刷新 | 低延迟 |
选型第一步:明确查询模式
固定 vs 灵活
高并发 vs 大查询二、实时报表
2.1 特点
维度相对固定:
按日期/城市/品类
查询并发较高2.2 选型
| 引擎 | 说明 |
|---|---|
| Doris / StarRocks | 高并发 + 物化视图 |
| ClickHouse | 预聚合引擎表 |
sql
-- 报表表:预聚合 + 物化视图
CREATE TABLE report_daily (...)
DISTRIBUTED BY HASH(city) BUCKETS 16;
CREATE MATERIALIZED VIEW mv_city AS
SELECT city, date, SUM(gmv) FROM report_daily GROUP BY city, date;| 要点 | 说明 |
|---|---|
| 预聚合 | 减少计算 |
| 物化视图 | 自动命中 |
| 分区裁剪 | 时间过滤 |
三、Ad-hoc 查询
3.1 特点
任意维度组合:
无法完全预计算
需要扫描/动态聚合3.2 选型
| 引擎 | 说明 |
|---|---|
| ClickHouse | 单表快速聚合 |
| Doris / StarRocks | 多表灵活 Join |
| Presto/Trino | 湖上即席 |
| 要点 | 说明 |
|---|---|
| 列式 | 扫描快 |
| 向量化 | 计算快 |
| 索引 | 裁剪 |
Ad-hoc 关键:
不依赖预计算
引擎原生扫描能力四、大屏
4.1 特点
高并发、小查询、秒级:
大量用户轮询固定指标4.2 选型
| 引擎 | 说明 |
|---|---|
| Doris / StarRocks | 高并发强 |
| ClickHouse | 需缓存 |
| 手段 | 说明 |
|---|---|
| 预聚合 | 指标表 |
| 结果缓存 | 短 TTL 缓存 |
| 前端轮询 | 合并请求 |
大屏设计:
指标预计算
结果缓存 + 降级
查询限流保护五、即席分析(大查询)
5.1 特点
大表扫描、复杂聚合:
并发低、单个查询资源大5.2 选型
| 引擎 | 说明 |
|---|---|
| ClickHouse | 大宽表聚合 |
| StarRocks | 大查询 + Join |
| Presto/Trino | 湖表扫描 |
| 资源隔离 | 队列/配额 |
| 要点 | 说明 |
|---|---|
| 资源控制 | 内存/CPU 限制 |
| 队列 | 大查询队列 |
| 超时 | 控制时长 |
六、实时大屏(秒级刷新)
6.1 链路
Kafka → Flink 聚合 → OLAP 引擎 → 大屏
或 Kafka → OLAP 引擎表(如 CH)6.2 架构
方案 A(Flink 预聚合):
Kafka → Flink(窗口聚合)→ Doris → 大屏
延迟秒级、数据量小
方案 B(引擎直连):
Kafka → CH Kafka 表 → 物化视图 → 查询
简单、延迟低| 对比 | Flink 预聚合 | 引擎直连 |
|---|---|---|
| 延迟 | 秒级 | 秒级 |
| 复杂度 | 中 | 低 |
| 扩展 | 强 | 中 |
七、多引擎组合架构
7.1 分层组合
明细层:ClickHouse(大宽表)
汇总层:Doris / StarRocks(高并发)
实时摄入:Flink → 各层常见组合:
明细查询 → ClickHouse
报表/大屏 → Doris / StarRocks
湖上分析 → Presto/Trino7.2 数据同步
引擎间同步:
明细 → 汇总(Flink/定时)
湖 → OLAP(批量导入)| 同步 | 说明 |
|---|---|
| 实时 | Flink CDC/写入 |
| 批量 | 定时导入 |
| 一致性 | 幂等 + 对账 |
八、选型决策框架
8.1 决策因素
| 因素 | 权重 |
|---|---|
| 查询模式 | 最高 |
| 并发 | 高 |
| 延迟 | 高 |
| 数据规模 | 中 |
| 运维 | 中 |
| 成本 | 中 |
8.2 决策树
多表 Join 多? → Doris / StarRocks
单表极速聚合? → ClickHouse
高并发小查询? → Doris / StarRocks
湖上即席? → Presto/Trino
实时时序? → Druid
固定维度超大? → Kylin8.3 验证流程
1. 明确场景指标(延迟/并发/QPS)
2. 自建基准测试
3. 小规模验证
4. 正式选型
5. 灰度上线九、选型清单
| 检查项 | 说明 |
|---|---|
| 查询模式 | 固定/灵活 |
| 并发 QPS | 预估 |
| 延迟要求 | 秒级/毫秒 |
| 数据规模 | 增量/存量 |
| 实时性 | 摄入延迟 |
| 运维团队 | 熟悉度 |
| 硬件成本 | 存储计算 |
最终:
场景驱动,数据说话
先小验证,再规模化常见问题速查
| 问题 | 要点 |
|---|---|
| 报表选什么 | Doris/StarRocks + 物化 |
| Ad-hoc 选什么 | CH / Doris |
| 大屏怎么快 | 预聚合 + 缓存 |
| 湖即席怎么查 | Presto/Trino |
| 能多引擎吗 | 分层组合 |