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图,是我根据多年经验总结的选型决策流程。你可以把它当成一个“导航仪”,按步骤走就能找到最合适的引擎。

实时OLAP引擎选型决策流程图 实时OLAP引擎选型决策流程 你的核心需求是什么? 全文搜索/日志搜索 聚合分析/报表 Elasticsearch 是否需要高并发点查? 是 否 Doris / StarRocks 时序数据还是单表聚合? 时序 → Druid 单表聚合 → ClickHouse 💡 说明: 如果业务同时需要搜索和分析,可以考虑混合架构(如ES + ClickHouse)。

3.5 我的选型心法

最后分享几个我自己的选型原则:

  1. 先看查询模式:是点查多还是聚合多?点查多选Doris/StarRocks,聚合多选ClickHouse。
  2. 再看数据量:百亿级以下,ClickHouse和Doris都能扛;千亿级以上,优先考虑Druid的预聚合能力。
  3. 最后看团队:如果团队运维能力弱,选社区成熟、文档多的引擎(ClickHouse或Elasticsearch)。

我的建议:不要一开始就上多引擎混合架构。先用一个引擎跑通核心场景,等业务复杂了再考虑引入第二个。我见过太多团队,一上来就搞“双引擎”,结果两个都没用好。