TL;DR
- 场景:离线+实时的看板/监控/运营分析,需要高并发、亚秒级聚合
- 结论:当”时间分区+预聚合+流批一体”是强需求时,Druid更省心;灵活度低于 ClickHouse/ES,需按业务建模取舍
- 产出:摘要、版本矩阵与常见故障速查&修复 SOP
版本矩阵
| 版本 | 发布日期 | 说明 |
|---|---|---|
| 34.0.0 | 2025-08-11 | 文档验证最新稳定版;按需升级并评估向量化与并发参数。 |
| 33.0.0 | 2025-04-29 | 文档验证上一主版本,官方仍提供发布信息可参考。 |
| 32.0.1 | 2025-03-19 | 文档验证维护版;自 32.0 起 Java 11 标记弃用,需规划 JDK 升级。 |
Druid 介绍
数据分析的基础架构可以根据不同的业务需求和技术特点分为以下几类:
-
基于Hadoop/Spark的批处理分析
- 典型案例:使用Hadoop的MapReduce或Spark Core进行大规模数据集的处理
- 应用场景:适用于对历史数据进行离线分析、数据挖掘等场景
-
混合架构(Hadoop/Spark + RDBMS)
- 实现方式:先使用Hadoop/Spark进行预处理,将聚合后的结果导入MySQL/Oracle等关系型数据库
-
NoSQL存储架构
- 解决方案:将处理结果保存到HBase、MongoDB等NoSQL数据库
-
流式处理架构
- 技术选型:使用Storm/Spark Streaming/Flink处理实时数据流
-
实时分析数据库架构
- 代表产品:使用Druid等OLAP分析型数据库
- 核心优势:支持亚秒级查询响应,适合实时分析场景
Druid是Metamarkets推出的一个分布式内存实时分析系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。Druid是一个开源的数据分析引擎工具,为实时和历史数据的次秒级查询设计,主要应用于对数据的OLAP查询,Druid提供低延迟(实时)的数据摄取、灵活的数据探索、快速的数据聚合。
架构组件
数据摄取层 (Ingestion Layer)
- 任务管理器 (Supervisor):负责管理数据摄取任务
- 数据源 (Data Sources):是 Druid 中的基本概念,用于表示一组数据
存储层 (Storage Layer)
- Druid 使用列式存储来优化查询性能
- Segments:数据在 Druid 中被划分为称为 segments 的块
查询层 (Query Layer)
- Druid 支持多种查询类型,包括实时查询、批量查询和复杂的聚合查询
- 查询协调器 (Query Coordinator):负责管理查询请求和将请求分发到不同的节点
服务层 (Service Layer)
- Broker:接受查询请求,并将其路由到合适的 Historical 或实时节点
- Historical:存储历史数据并处理查询
- Middle Manager:负责摄取和处理实时数据流
- Coordinator:负责集群管理和数据平衡
- Overlord:负责任务调度和管理
- Router:负责请求路由
与OLAP对比
- SparkSQL / Impala / ClickHouse:支持海量数据,灵活性强,但对响应时间没有保证
- 搜索引擎架构的系统(Elasticsearch等):在搜索的查询上做到了亚秒级别的响应
- Druid/Kylin:在入库的时候对数据进行预聚合,实现对超大数据集的秒级响应
技术特点
列式存储
- Druid独立的存储和压缩每一列,只需要读取特定查询所需的内容
流式和批量摄取(Ingestion)
- 支持Apache Kafka、HDFS、AWS S3 等现成的连接器
本地的搜索索引
- Druid为字符串创建倒排索引,以支持快速搜索和排序
灵活的Schema
- Druid可以处理变化的Schema和嵌套数据
基于时间优化Partition
- Druid基于时间智能的对数据进行分区
支持SQL
- Druid支持本机的JSON语言,还支持基于HTTP或者JDBC的SQL
水平扩展性
- Druid已经用于生产环境中,每秒接收百万个事件,保存多年的数据并提供次秒级查询
应用场景
Druid擅长的部分:
- 对于大部分查询场景可以亚秒级响应
- 事件流实时写入与批量数据导入兼备
- 数据写入前预聚合节省存储空间,提升查询效率
- 水平扩容能力强
- 社区活跃
具体方向:
- 实时数据分析:对实时数据流(如日志、传感器数据等)进行快速分析和可视化
- 商业智能:用于商业分析,支持快速的报告生成和自助式数据探索
- 监控和指标分析:适合监控应用程序性能、用户行为分析以及操作指标
- 网络分析:处理网络流量数据,以便快速检测异常或进行趋势分析
- 复杂事件处理 (CEP):实时处理和分析事件流
- 机器学习预处理:作为机器学习模型的输入
错误速查
| 症状 | 根因 | 修复 |
|---|---|---|
| 实时摄取延迟上升(Kafka lag 增大) | 任务槽不足、supervisor 配置不当或扩展未加载 | Overlord supervisor/{id}/stats、MiddleManager 指标提升 taskCount/并发槽,校验并加载 druid-kafka-indexing-service 扩展 |
| 查询时快时慢、抖动明显 | 小而多的 segments 造成调度与扫描开销 | 观察段数、大小与时间分布;启用/加强 Compaction,合并小段 |
| Broker/Historical 内存吃紧或 OOM | 结果集过大、并发高、上下文参数不合理 | 限制返回量;开启/调整向量化与查询上下文 |
| 无法消费 Kafka(提示需加载扩展) | Kafka 索引扩展未加载到 Overlord/MiddleManager | 启动日志与 druid.extensions.loadList;在两端加载扩展并重启 |
| 升级后启动报 Java 版本/弃用告警 | 运行在 Java 11,版本已弃用或即将移除支持 | 迁移至 JDK 17/21;官方计划在 37.0.0 结束 Java 11 支持 |