没有找到您的问题? 联系我们
Druid 是数据仓库吗?我应该在什么情况下选择 Druid 而不是 Redshift/BigQuery/Snowflake?
Apache Druid 是一种新型数据库,旨在为事件驱动型数据提供实时分析工作负载,它不是传统的数据仓库。虽然 Druid 融合了数据仓库的架构理念(如列式存储),但也融合了搜索系统和时序数据库的设计。Druid 的架构旨在处理许多传统数据仓库无法解决的用例。
与传统数据仓库相比,Druid 具有以下优势:
- OLAP 类型查询的延迟极低
- 数据摄取延迟极低(包括流式和批处理)
- 与 Apache Kafka、AWS Kinesis、HDFS、AWS S3 等的开箱即用集成
- 基于时间的自动分区,支持高性能的时间序列查询
- 快速搜索和过滤,实现快速的多维切片和钻取
- 极简的模式设计,原生支持半结构化和嵌套数据
如果您的用例需要以下功能,请考虑使用 Druid 来增强您的数据仓库:
- 驱动面向用户的应用程序
- 高并发下的低延迟查询响应
- 数据的实时可见性
- 快速的即席多维切片和钻取
- 流式数据
总而言之,当用例涉及实时分析,且最终用户(无论技术背景如何)希望通过连续快速执行大量查询来探索或深入理解数据趋势时,Druid 的表现最为出色。
Druid 是日志聚合/日志搜索系统吗?我应该在什么情况下选择 Druid 而不是 Elastic/Splunk?
Druid 使用倒排索引(特别是压缩位图)进行快速搜索和过滤,但它通常不被视为搜索系统。虽然 Druid 包含许多搜索系统常见的特性,例如摄取结构化和半结构化数据的能力,以及对数据进行搜索和过滤的能力,但 Druid 通常不用于摄取文本日志并对这些日志进行全文搜索查询。不过,Druid 常被用于摄取和分析 JSON 等半结构化数据。
Druid 的核心是一个分析引擎,因此它比搜索系统能更快、更高效地支持数值聚合、分组(包括多维分组)以及其他分析工作负载。
Druid 是时序数据库吗?我应该在什么情况下选择 Druid 而不是 InfluxDB/OpenTSDB/Prometheus?
Druid 确实与时序数据库有一些共同特征,但它也结合了分析数据库和搜索系统的理念。与时序数据库一样,Druid 对带有时间戳的数据进行了优化。Druid 按时间对数据进行分区,包含时间过滤器的查询速度将比不带过滤器的查询快得多。当存在时间过滤器时,聚合指标和对维度(大致相当于 TSDB 的标签)进行过滤也非常快。然而,由于 Druid 融合了分析数据库和搜索系统的许多架构设计,它在对非时间标签进行分组、搜索和过滤,或者计算直方图和分位数等复杂指标时,性能可以显著优于 TSDB。
Druid 是否实现了存储与计算分离?
Druid 会创建原始数据的索引副本,并针对分析查询进行了高度优化。Druid 在这些索引数据(在 Druid 中称为 'segment')上运行查询,而不会按需从外部存储系统拉取原始数据。
Druid 是如何部署的?
Druid 可以部署在任何基于 *NIX 环境的商用硬件上。Druid 集群由多个不同的服务组成,每个服务都设计为高效地执行一小部分特定功能(摄取、查询、协调等)。许多此类服务可以共置,并按照此处所述部署在同一硬件上。
Druid 是为云而设计的,在 AWS、GCP、Azure 及其他云环境中运行良好。
Druid 在我的大数据技术栈中处于什么位置?
Druid 通常连接到原始数据源,例如消息总线(如 Apache Kafka)或文件系统(如 HDFS)。Druid 会摄取一份经过优化、列式存储的索引数据副本,并在此基础上提供分析工作负载。
一种常见的面向流数据的 Druid 设置如下:原始数据 → Kafka → 流处理器(可选,通常用于 ETL) → Kafka(可选) → Druid → 应用程序/用户
一种常见的面向批处理/静态文件的 Druid 设置如下:原始数据 → Kafka(可选) → HDFS → ETL 过程(可选) → Druid → 应用程序/用户
同一个 Druid 集群可以同时服务于流式和批处理路径。
Druid 是内存数据库吗?
Druid 的早期版本不允许将数据分页进出磁盘,因此它通常被称为“内存”数据库。随着 Druid 的发展,这一限制已被移除。为了在硬件成本和查询性能之间取得平衡,Druid 利用内存映射(memory-mapping)在磁盘和内存之间对数据进行分页,并将单个节点可加载的数据量扩展到其磁盘大小。
可以为各个 Historical 节点配置它们可处理的最大数据量。结合 Coordinator 根据不同查询需求将数据分配到不同“层级”的能力,Druid 本质上是一个可以在广泛的性能需求范围内进行配置的系统。所有数据既可以全部保留在内存中进行处理,也可以过度分配(over-committed)超过可用内存的总量。Druid 还支持复杂的配置,例如将最近一个月的数据保留在内存中,而其他所有数据则进行过度分配处理。