3. 主流实时OLAP引擎对比:ClickHouse、Doris、Druid、StarRocks、Elasticsearch
选实时OLAP引擎,说白了就是选“谁最适合你的业务场景”。
我见过不少团队,一上来就追最火的引擎,结果跑了两周发现根本扛不住写入压力。也见过有人死磕一个引擎,非要它干不擅长的事——比如拿Elasticsearch做复杂聚合,查一次等半分钟。
这一章,我把五个主流引擎掰开揉碎讲清楚。你不需要全记住,但得知道它们各自擅长什么、不擅长什么。这样选型时心里才有底。
核心观点:没有“最好的引擎”,只有“最适合你场景的引擎”。选型的关键是搞清楚你的数据特征、查询模式、并发量和一致性要求。
3.1 五款引擎的“人设”速览
先给个直观印象。我用一句话概括每个引擎的核心定位:
- ClickHouse:列式存储界的“性能怪兽”,单表聚合极快,但多表Join是软肋。
- Apache Doris:国产开源新秀,主打高并发点查和实时更新,生态越来越完善。
- Apache Druid:时序数据的老牌选手,擅长预聚合和流式摄入,适合监控和广告场景。
- StarRocks:Doris的分支进化版,性能更强,尤其在大规模Join和物化视图上下了功夫。
- Elasticsearch:全文搜索的王者,倒排索引是看家本领,但做OLAP聚合有点“跨界”。
嗯,这里要注意:Elasticsearch严格来说不算纯OLAP引擎,但很多团队拿它做日志分析和可观测性,所以也放进来了。
3.2 核心能力对比:一张表说清楚
我个人习惯用对比表来快速定位。下面这张表,我按五个维度做了横向对比:
| 维度 | ClickHouse | Apache Doris | Apache Druid | StarRocks | Elasticsearch |
|---|---|---|---|---|---|
| 数据模型 | 宽表、扁平 | 星型/雪花模型 | 时序、预聚合 | 星型/雪花模型 | 文档、倒排索引 |
| 写入性能 | 极高(批量) | 高(Stream Load) | 高(实时流式) | 高(Stream Load) | 中(近实时) |
| 查询性能 | 单表极快 | 高并发点查强 | 预聚合查询快 | 复杂Join强 | 全文搜索极快 |
| 实时性 | 秒级 | 秒级 | 秒级 | 秒级 | 近实时(1s+) |
| 生态与社区 | 成熟、文档多 | 国内活跃 | 老牌、稳定 | 快速增长 | 最成熟、插件多 |
我的经验:如果你团队里没人用过这些引擎,优先选ClickHouse或StarRocks。前者社区资源多,遇到问题容易搜到答案;后者性能上限高,但需要花时间调优。
3.3 适用场景拆解
3.3.1 ClickHouse:单表聚合的“性能怪兽”
ClickHouse是我用得最多的引擎之一。它的强项是单表聚合——几亿行数据,group by几个字段,秒级出结果。我在项目中遇到过需要实时分析用户行为漏斗的场景,ClickHouse跑起来非常稳。
适合场景:
- 用户行为分析(PV/UV、留存、漏斗)
- 监控指标聚合(CPU、内存、网络)
- 日志分析(结构化日志的快速聚合)
不适合场景:
- 高并发点查(比如根据用户ID查单条记录)
- 多表Join(尤其是大表Join大表,性能下降明显)
- 频繁数据更新(ClickHouse的MergeTree设计偏向批量写入)
避坑指南:我曾经在一个项目中用ClickHouse做实时大屏,数据每秒写入几万行。结果因为没控制好分区粒度,导致查询时扫描了大量无用数据。后来把分区从小时级改成天级,查询性能提升了3倍。
3.3.2 Apache Doris:高并发点查的“多面手”
Doris的设计思路和ClickHouse不太一样。它更强调高并发和实时更新。你想想看,如果业务需要同时支持几万个用户查自己的订单详情,Doris比ClickHouse合适得多。
适合场景:
- 实时报表(支持高并发、低延迟)
- 用户画像(标签查询、人群圈选)
- 数据湖加速(作为查询层)
不适合场景:
- 超大规模单表聚合(不如ClickHouse快)
- 全文搜索(这不是它的强项)
3.3.3 Apache Druid:时序数据的“老牌劲旅”
Druid在时序数据领域深耕多年。它的核心思路是“预聚合”——数据进来时就按时间粒度做聚合,查询时直接读聚合结果。这在监控和广告场景下非常高效。
适合场景:
- 监控指标(Prometheus的替代或补充)
- 广告归因分析(点击、曝光、转化)
- 物联网时序数据
不适合场景:
- 明细数据查询(预聚合后丢失了原始细节)
- 复杂Join(Druid的Join能力很弱)
3.3.4 StarRocks:Doris的“性能增强版”
StarRocks是从Doris fork出来的分支,但发展速度很快。它在Join优化和物化视图上做了大量改进。我个人测试过,同样一个三表Join的查询,StarRocks比Doris快30%以上。
适合场景:
- 复杂分析(多表Join、子查询)
- 实时大屏(高吞吐、低延迟)
- 数据湖加速(支持Hive、Iceberg等外部表)
不适合场景:
- 小规模团队(运维成本比Doris高一些)
- 纯时序场景(不如Druid专业)
3.3.5 Elasticsearch:全文搜索的“王者”
Elasticsearch的核心是倒排索引。你给它一堆文档,它能毫秒级告诉你哪些文档包含某个关键词。但如果你拿它做sum、avg、group by,性能就会打折扣。
适合场景:
- 日志搜索(ELK经典组合)
- 应用搜索(商品搜索、知识库搜索)
- 可观测性(APM、链路追踪)
不适合场景:
- 大规模聚合分析(性能远不如列式引擎)
- 实时更新(文档更新成本高)
3.4 选型建议:一张决策流程图
下面这张SVG图,是我根据多年经验总结的选型决策流程。你可以把它当成一个“导航仪”,按步骤走就能找到最合适的引擎。
3.5 我的选型心法
最后分享几个我自己的选型原则:
- 先看查询模式:是点查多还是聚合多?点查多选Doris/StarRocks,聚合多选ClickHouse。
- 再看数据量:百亿级以下,ClickHouse和Doris都能扛;千亿级以上,优先考虑Druid的预聚合能力。
- 最后看团队:如果团队运维能力弱,选社区成熟、文档多的引擎(ClickHouse或Elasticsearch)。
我的建议:不要一开始就上多引擎混合架构。先用一个引擎跑通核心场景,等业务复杂了再考虑引入第二个。我见过太多团队,一上来就搞“双引擎”,结果两个都没用好。