Apache Druid 是一款高性能的实时分析(OLAP)数据库,可以在大规模和高负载下对流式处理和批处理数据提供亚秒级查询性能。
Apache Druid 项目主要采用 Java 语言开发,遵循 Apache 2.0 开源协议,代码托管在 GitHub:
https://github.com/apache/druid/
系统架构
Apache Druid 采用分布式架构以满足大数据应用场景下的性能需求,如下图所示:
这是一种多进程、松散耦合的服务架构,每个进程都可以独立部署和扩展。这种设计提供了极大的灵活性和弹性,主要的进程类型包括:
-
• 主节点:负责集群的协调和管理,包括协调集群中的数据分布,控制数据接入,以及负责管理“索引服务”;元数据存储包括数据段的元信息(位置、大小、版本)、任务信息、配置等,通常采用 PostgreSQL、MySQL 等关系型数据库;ZooKeeper 用于服务发现、领导选举以及存储部分元数据。 -
• 查询节点:接收来自客户端的查询请求,将查询发送给持有相关数据的节点,接收来自各个数据节点的部分结果并且进行合并后将最终结果返回给客户端。 -
• 数据节点:负责数据的存储、查询和接入。
除此之外,Apache Druid 还通过深度存储层(例如 S3、HDFS、Azure Blob Storage 等)实现数据的长期持久化存储;数据节点不永久存储数据,它们从深度存储拉取数据到本地提供服务。
Apache Druid 支持灵活的部署方式,既可以在单个服务器上运行所有节点,也可以在数千个服务器上进行分布式部署。
功能特性
-
• 列式存储格式:Apache Druid 采用了列式存储,这意味着它只需要加载查询所需的列,从而极大地提升了基于少数列的查询速度。此外,为了支持快速扫描和聚合操作,它还会根据每个列的数据类型进行针对性的存储优化。
-
• 可扩展的分布式系统:典型的 Apache Druid 部署涉及几十到几百台服务器。它能够以每秒数百万条的速率导入数据,同时存储数万亿条记录,并且保持亚秒级到数秒级的查询延迟。 -
• 大规模并行处理:Apache Druid 能够在整个集群范围内并行处理每个查询。
-
• 实时与批量数据接入:支持实时和批量两种数据动人方式,并且数据在接入之后可以立即查询。
-
• 自动模式发现:Apache Druid 可以在数据接入时自动检测、定义、更新字段名称和数据类型。 -
• SQL 支持:开发人员和数据分析师可以使用熟悉的 SQL 语句执行各种操作,包括数据接入、转换和查询。 -
• 易于运维:运维人员可以随意添加或者移除服务器,Apache Druid 集群会在后台自动重新平衡,整个过程无需任何停机;如果某台服务器发生故障,系统能够自动绕过故障点路由数据。 -
• 云原生、高容错的架构:数据接入之后,Apache Druid 会将数据副本复制到深度存储中(通常是云存储、HDFS 或者共享文件系统)。即使所有服务器都发生故障,仍然可以从深度存储中恢复数据。对于影响少数服务器的局部故障,数据复制机制能确保系统在恢复期间也可以正常处理查询。 -
• 支持快速过滤的索引技术:Apache Druid 使用 Roaring 或者 CONCISE 压缩位图索引,从而实现跨多列的快速过滤和搜索。 -
• 基于时间的分区:Apache Druid 首先会按时间对数据进行分区,用户也可以选择基于其他字段进行额外的分区。基于时间的查询语句只需要访问符合时间范围的数据分区,实现了显著的性能提升。 -
• 近似算法:Apache Druid 提供了近似去重计数、近似排名以及近似直方图和分位数计算等算法。这些算法不仅节省内存使用,而且通常比精确计算快很多。当然,在准确性比速度更重要的场景下,它也提供精确的去重计数和排名功能。 -
• 数据接入时的自动汇总:Apache Druid 可以选择在数据导入时进行汇总,对数据进行部分预先聚合,可能会显著地节约成本并且提升性能。
下载安装
Apache Druid 支持单机、集群、Docker 等部署方式。对于单机快速体验,需要满足以下条件:
-
• Linux、macOS 或者其他类 Unix 操作系统,不支持 Windows; -
• 至少 6 GB 内存; -
• Java 17; -
• Python 3; -
• Perl 5。
建议创建一个新的操作系统账号安装 Apache Druid,不建议使用 root 用户。
首先,通过以下地址下载最新版本:
https://druid.apache.org/downloads/
然后解压文件:
tar -xzf apache-druid-34.0.0-bin.tar.gz
cd apache-druid-34.0.0
然后使用默认配置文件(conf/druid/auto)启动服务:
./bin/start-druid
启动服务之后,通过以下地址访问 Web 控制页面:
http://localhost:8888
官方文档:
https://druid.apache.org/docs/latest/tutorials/

