数据岗位面试题更新 2026-08-05

请阐述 Apache Druid 在面对海量数据时,其分布式存储架构和查询引擎分别采用了哪些设计来保证扩展性与高性能?

数据系统设计技术原理Apache Druid

考察说明

考查对 Druid 作为分布式列式存储与实时分析数据库的架构原理理解,包括存储分层、索引机制和查询协调流程。

回答思路

  1. 【回答框架 1】Druid 本质上是一个分布式、列式存储的实时分析数据库,专为 OLAP 场景设计。其核心设计是存储与计算分离:历史节点(Historical)负责存储已落盘的不可变分段(Segment),实时节点(Realtime)负责摄取并索引实时流入的数据,协调节点(Coordinator)负责管理 Segment 的元数据和负载均衡,代理节点(Broker)接收查询并路由到相应节点。
  2. 【回答框架 2】在存储层面,Druid 将数据按时间范围划分为 Segment,Segment 采用列式存储,并使用位图索引(如 Roaring Bitmap)以及对于常用维度键的字典编码,从而提升压缩率和查询效率。Segment 在多个 Historical 节点间复制,保证高可用,并通过 Coordinator 的协调实现负载均衡。海量数据通过横向扩展 Historical 节点来增加存储容量和查询吞吐。
  3. 【回答框架 3】查询处理上,Broker 节点解析查询(如基于 JSON 的查询语言),将其拆分为并行子查询分发到各个持有相关 Segment 的 Historical/Realtime 节点,各节点在本地执行扫描、过滤、聚合,返回中间结果,由 Broker 进行最终合并与归并,从而实现弹性扩展。同时利用 Segment 粒度的时间分区和预聚合(roll-up)进一步减少扫描数据量。
  4. 【回答框架 4】对于实时与批量数据接入,Druid 分别通过实时摄取任务(如 Kafka Indexing Service)和批量索引任务生成 Segment,并保证实时可见与最终一致性。存储层可选使用 Deep Storage(如 HDFS/S3)进行 Segment 的持久化与归档,以低成本实现无限历史数据扩展。
  5. 【关键点 1】Druid 采用列式存储和分段(Segment)机制,按时间分区并配合位图索引。
  6. 【关键点 2】存储与查询分离,Broker 路由、Historical 本地执行、Coordinator 管理元数据。
  7. 【关键点 3】通过横向扩展 Historical 节点和利用 Deep Storage 实现海量数据水平扩展。
  8. 【关键点 4】Segment 复制与协调器平衡保证高可用和负载均衡。
  9. 【易错点 1】混淆 Druid 分片机制与 HBase 等 KV 存储,Druid 靠时间分区与维度字典优化列式扫描。
  10. 【易错点 2】忽略实时与批量路径差异,两者 Segment 生成与可见性机制不同。
  11. 【易错点 3】认为 Druid 适用于所有查询,其优势在于聚合与过滤,不适合单行点查或频繁更新。