写点什么

大数据 -149 Apache Druid 实时 OLAP 架构与选型要点

作者:武子康
  • 2025-11-11
    山东
  • 本文字数:3694 字

    阅读完需:约 12 分钟

大数据-149 Apache Druid 实时 OLAP 架构与选型要点

TL;DR

  • 场景:离线+实时的看板/监控/运营分析,需要高并发、亚秒级聚合

  • 结论:当“时间分区+预聚合+流批一体”是强需求时,Druid 更省心;灵活度低于 ClickHouse/ES,需按业务建模取舍

  • 产出:摘要、版本矩阵与常见故障速查 &修复 SOP


版本矩阵


Druid 介绍

数据分析的基础架构可以根据不同的业务需求和技术特点分为以下几类,每种架构都有其特定的应用场景和优势:


  1. 基于 Hadoop/Spark 的批处理分析

  2. 典型案例:使用 Hadoop 的 MapReduce 或 Spark Core 进行大规模数据集的处理

  3. 应用场景:适用于对历史数据进行离线分析、数据挖掘等场景

  4. 技术细节:Hadoop 适合处理 TB 级以上的数据,Spark 则在内存计算方面表现更优

  5. 混合架构(Hadoop/Spark + RDBMS)

  6. 实现方式:先使用 Hadoop/Spark 进行预处理,将聚合后的结果导入 MySQL/Oracle 等关系型数据库

  7. 优势:结合了分布式计算的高效性和 RDBMS 的查询便捷性

  8. 典型应用:数据仓库、BI 报表系统

  9. NoSQL 存储架构

  10. 解决方案:将处理结果保存到 HBase、MongoDB 等 NoSQL 数据库

  11. 优势:解决了传统数据库的存储容量限制,支持海量数据存储

  12. 场景示例:用户行为日志分析、物联网设备数据存储

  13. 特别说明:HBase 特别适合需要随机实时读写访问超大规模数据集的场景

  14. 流式处理架构

  15. 技术选型:使用 Storm/Spark Streaming/Flink 处理实时数据流

  16. 存储选择:处理结果可保存到 RDBMS 或 NoSQL

  17. 典型应用:实时监控系统、金融交易分析

  18. 性能对比:Flink 在低延迟方面表现突出,Spark Streaming 更适合微批处理场景

  19. 实时分析数据库架构

  20. 代表产品:使用 Druid 等 OLAP 分析型数据库

  21. 核心优势:支持亚秒级查询响应,适合实时分析场景

  22. 应用示例:广告效果实时分析、运营指标监控看板

  23. 架构特点:通常采用列式存储,支持高性能聚合查询


每种架构的选择需要考虑数据规模、实时性要求、查询复杂度以及团队技术栈等因素。在实际应用中,这些架构往往会组合使用,形成完整的数据分析解决方案。例如:流处理架构可能同时对接实时分析数据库和离线数据仓库,形成 Lambda 架构。



  • 互联网技术的快速增长催生出了各类大体量的数据,Hadoop 很大的贡献在于帮助企业将他们那些低价值的事件流数据转换为高价值的聚合数据。

  • Hadoop 擅长的是存储和获取大规模数据,它并不提供任何性能上的保证它们能够很快的取到数据,虽然 Hadoop 是高可用的系统,但在高并发下负载下性能会下降。

  • Hadoop 是一个很好的后端、批量处理和数据仓库系统,在一个需要高并发的并且保证查询性能和数据可用性,并需要提供产品级的保证的需求,Hadoop 并不能够满足。

  • Druid 是 Metamarkets(一家为在线媒体或广告公司提供数据分析服务的公司)退出的一个分布式内存实时分析系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。

  • Druid 是一个开源的数据分析引擎工具,为实时和历史数据的次秒级(多于一秒)查询设计,主要应用于对数据的 OLAP 查询,Druid 提供低延迟(实时)的数据摄取、灵活的数据探索、快速的数据聚合。现在的 Druid 部署已支持扩展到数万亿时间和 PB 级数据。

数据摄取层 (Ingestion Layer)

  • 任务管理器 (Supervisor):负责管理数据摄取任务。

  • 数据源 (Data Sources):是 Druid 中的基本概念,用于表示一组数据。

存储层 (Storage Layer)

  • Druid 使用列式存储来优化查询性能。数据按列存储,以提高聚合和过滤的效率。

  • Segments:数据在 Druid 中被划分为称为 segments 的块,每个 segment 通常包含一个时间范围内的数据。

查询层 (Query Layer)

  • Druid 支持多种查询类型,包括实时查询、批量查询和复杂的聚合查询。

  • 查询协调器 (Query Coordinator):负责管理查询请求和将请求分发到不同的节点。

索引层 (Indexing Layer)

  • Druid 采用一种基于时间的索引策略,支持实时和历史数据的快速查询。

  • 支持多种索引类型,包括基本索引、维度索引和时间索引。

服务层 (Service Layer)

  • Druid 的架构中包括多个服务,如 Broker、Historical、Middle Manager 等,负责数据的查询和摄取。

  • Broker:接受查询请求,并将其路由到合适的 Historical 或实时节点。

  • Historical:存储历史数据并处理查询。

  • Middle Manager:负责摄取和处理实时数据流。

与 OLAP 对比


SparkSQL / Impala / ClickHouse,支持海量数据,灵活性强,但对响应时间没有保证,当数据量和计算复杂度增加后,响应时间会变慢,从秒级到分钟级,甚至小时级都有可能。搜索引擎架构的系统(Elasticsearch 等),在入库的时候将数据转换为倒排索引,牺牲了灵活性换了很好性能,在搜索的查询上做到了亚秒级别的响应,但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级别。Druid/Kylin,在入库的时候对数据进行预聚合,进一步牺牲灵活性来换取性能,实现对超大数据集的秒级响应。


  • Kylin 利用 Hadoop HBase 做计算和存储,使用 SQL 查询,提供 JDBC、ODBC 驱动与常见的 BI 工具的集成

  • Druid 有自己独立的分布式集群,能够实时摄入数据,有自己的查询接口(与 BI 兼容性较弱),通常用于实时要求高的场景目前没有一个 OLAP 分析引擎能在数据量、灵活程度、性能、吞吐、并发做到完美,需要基于自己的业务场景进行选择。

技术特点

基本介绍

Apache Druid 是一个开源的、分布式、实时 OLAP 分析工具,Druid 的核心结合了数据仓库、时间序列数据库和搜索系统的思想,适用于多种场景的高性能数据实时分析。Druid 将这三个系统中的每个系统的关键特征合并到其接收层、存储格式、查询层和核心体系结构中。



时间序列数据库主要用于处理、带时间标签(按照时间的顺序变化)的数据,带时间标签的数据也称为时间序列数据。


时间序列数据库主要用于电力行业、化工行业等各类实时监测、检查、分析设备所采集、产生的数据,这些工业数据的典型特点是:


  • 产生频率快(每一个监测点一秒钟可内可以产生多条数据)

  • 严重依赖于采集时间(每一条数据均要求对应唯一的时间)

  • 测点多信息大(常规的实时检测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十 GB 的数据)。

主要特点

列式存储

Druid 独立的存储和压缩每一列,主需要读取特定查询所需的内容,这可以支持快速扫描、排名和聚合。

流式和批量摄取(Ingestion)

支持 Apache Kafka、HDFS、AWS S3 等现成的连接器

本地的搜索索引

Druid 为字符串创建倒排索引,以支持快速搜索和排序

灵活的 Schema

Druid 可以处理变化的 Schema 和嵌套数据

基于时间优化 Partition

Druid 基于时间智能的对数据进行分区,基于时间的查询比传统数据库要快的多

支持 SQL

Druid 支持本机的 JSON 语言,还支持基于 HTTP 或者 JDBC 的 SQL

水平扩展性

Druid 已经用户生产环境中,每秒接收百万个事件,保存多年的数据并提供次秒级查询

操作简单

只需要增加或删除服务器即可扩展或缩小规模,Druid 会自动平衡,容错架构通过服务器的故障进行路由。

集成

Druid 是开源大数据的技术补充,包括 Apache Kafka、Apache Hadoop、Apache Flink 等,通常位于存储或处理层与最终应用之间,充当查询层或数据分析服务。


Ingestion(摄取)

Druid 支持流式传输和批量社区,Druid 连接到数据源,包括:Kafka(用于流数据加载),或分布式文件系统,如 HDFS(用于批处理数据加载)。


存储

Druid 的数据存储采用列式存储格式,根据列的类型(字符串、数字等),应用不同的压缩和编码方法,根据列类型不同的类型的索引 Druid 为字符串列构建倒排索引,以进行快速搜索和过滤,Druid 可按时间对数据进行智能分区,以实现面向时间的快速查询。Druid 在摄取数据时对数据进行预聚合,节省大量的存储空间。


查询方式

Druid 支持 JSON、SQL 两种方式查询数据。


应用场景

Druid 擅长的部分:


  • 对于大部分查询场景可以亚秒级响应

  • 事件流实时写入与批量数据导入兼备

  • 数据写入前预聚合节省存储空间,提升查询效率

  • 水平扩容能力强

  • 社区活跃


具体的方向有如下:


  • 实时数据分析:对实时数据流(如日志、传感器数据等)进行快速分析和可视化。

  • 商业智能:用于商业分析,支持快速的报告生成和自助式数据探索。

  • 监控和指标分析:适合监控应用程序性能、用户行为分析以及操作指标。

  • 网络分析:处理网络流量数据,以便快速检测异常或进行趋势分析。

  • 复杂事件处理 (CEP):实时处理和分析事件流,帮助企业快速响应市场变化。

  • 机器学习预处理:作为机器学习模型的输入,提供快速的数据摄取和处理能力。


那是否需要 Druid 呢?


  • 处理时间序列事件

  • 快速的聚合以及探索式分析

  • 近实时的分析 亚秒级响应

  • 存储大量(TB、PB 级别)可以预先定义若干维度的事件

  • 无单点问题的数据存储

错误速查

其他系列

🚀 AI 篇持续更新中(长期更新)

AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI-调查研究-108-具身智能 机器人模型训练全流程详解:从预训练到强化学习与人类反馈🔗 AI模块直达链接

💻 Java 篇持续更新中(长期更新)

Java-154 深入浅出 MongoDB 用 Java 访问 MongoDB 数据库 从环境搭建到 CRUD 完整示例 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!🔗 Java模块直达链接

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解🔗 大数据模块直达链接

发布于: 23 分钟前阅读数: 7
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-149 Apache Druid 实时 OLAP 架构与选型要点_Java_武子康_InfoQ写作社区