Apache Druid 简介
Apache Druid 是一个实时分析数据库,专为在大规模数据集上进行快速的“切片与切块”(即“OLAP”查询)分析而设计。Druid 最常用于实时摄取、快速查询性能和高可用性至关重要的场景。
Druid 通常被用作分析型应用程序 GUI 的数据库后端,或者用于需要快速聚合的高并发 API。Druid 最适合处理面向事件的数据。
Druid 的常见应用领域包括
| 应用场景 | 描述 |
|---|---|
| 点击流分析 | 分析网站和移动应用上的用户行为,以了解导航模式、热门内容和用户参与度 |
| 网络遥测分析 | 监控和分析网络流量及性能指标,以优化网络效率、识别瓶颈并确保服务质量 |
| 服务器指标存储 | 收集并存储 CPU 使用率、内存使用率、磁盘 I/O 和网络活动等性能指标,以监控服务器运行状况并优化资源分配 |
| 供应链分析 | 利用供应链各阶段的数据来优化库存管理、简化物流、预测需求并提高整体运营效率 |
| 应用性能指标 | 监控和分析软件应用的性能,以确定改进领域、排查问题并确保最佳用户体验 |
| 数字营销/广告分析 | 跟踪和分析跨各种渠道(如社交媒体、搜索引擎和展示广告)的数字营销活动和广告投放效果 |
| 商业智能 (BI)/OLAP(联机分析处理) | 利用数据分析工具和技术从大数据集中获取洞察、生成报告,并做出数据驱动的决策,以改善业务运营和战略 |
| 客户分析 | 分析客户数据以了解偏好、行为和购买模式,从而实现个性化营销策略、改善客户服务并加强客户保留工作 |
| 物联网 (IoT) 分析 | 处理和分析物联网设备生成的数据,深入了解设备性能、用户行为和环境状况,从而促进自动化、优化和预测性维护 |
| 金融分析 | 评估金融数据以衡量财务业绩、管理风险、检测欺诈并做出明智的投资决策 |
| 医疗分析 | 分析医疗数据以改善患者预后、优化医疗交付、降低成本,并识别疾病和治疗的趋势与模式 |
| 社交媒体分析 | 监控和分析社交媒体活动(如点赞、分享、评论和提及),以了解受众情绪、跟踪品牌感知并识别意见领袖 |
如果您正在试验 Druid 的新用例,或者对 Druid 的功能特性有疑问,请加入 Apache Druid Slack 频道。在那里,您可以与 Druid 专家交流、提问并获得实时帮助。
Druid 的主要特性
Druid 的核心架构结合了数据仓库、时序数据库和日志搜索系统的理念。Druid 的一些主要特性包括:
- 列式存储格式。 Druid 使用面向列的存储。这意味着它只加载特定查询所需的列,这极大地提高了仅检索少数几列的查询速度。此外,为了支持快速扫描和聚合,Druid 会根据每列的数据类型对其存储进行优化。
- 可扩展的分布式系统。 典型的 Druid 部署跨越数十到数百台服务器的集群。Druid 可以以每秒数百万条记录的速度摄取数据,同时保留数万亿条记录,并将查询延迟保持在亚秒级到几秒之间。
- 大规模并行处理。 Druid 可以在整个集群中并行处理每个查询。
- 实时或批量摄取。 Druid 可以实时或批量摄取数据。摄取的数据立即可用于查询。
- 自愈、自平衡,易于操作。 作为运维人员,您可以添加服务器以横向扩展或移除服务器以进行缩容。Druid 集群会在后台自动重新平衡,无需停机。如果 Druid 服务器发生故障,系统会自动绕过损坏部分,直到服务器被替换。Druid 的设计目标是持续运行,无需任何计划外停机。这同样适用于配置更改和软件更新。
- 云原生、容错且不会丢失数据的架构。 摄取后,Druid 会将您的数据副本安全地存储在 深度存储 (deep storage) 中。深度存储通常是云存储、HDFS 或共享文件系统。即使在所有 Druid 服务器都发生故障的极端情况下,您也可以从深度存储中恢复数据。对于仅影响少数 Druid 服务器的有限故障,副本机制确保了在系统恢复期间查询仍然可行。
- 用于快速过滤的索引。 Druid 使用 Roaring 或 CONCISE 压缩位图索引来创建索引,从而实现跨多列的快速过滤和搜索。
- 基于时间的分区。 Druid 首先按时间对数据进行分区。您可以根据需要选择基于其他字段实施额外分区。基于时间的查询仅访问与查询时间范围匹配的分区,从而显著提高了性能。
- 近似算法。 Druid 包含用于近似计数去重 (count-distinct)、近似排名以及计算近似直方图和分位数的算法。这些算法提供受限的内存使用,通常比精确计算快得多。对于准确性重于速度的情况,Druid 也提供精确计数去重和精确排名。
- 摄取时的自动汇总。 Druid 可选支持在摄取时进行数据汇总。这种汇总会对您的数据进行部分预聚合,从而可能带来显著的成本节省和性能提升。
何时使用 Druid
许多不同规模的公司在许多不同的用例中使用 Druid。欲了解更多信息,请参阅 Powered by Apache Druid。
如果您的用例符合以下几点,Druid 很可能是一个不错的选择:
- 插入速率非常高,但更新频率较低。
- 大多数查询是聚合和报表查询,例如“group by”查询。您也可能有搜索和扫描查询。
- 您的目标查询延迟为 100 毫秒到几秒。
- 您的数据具有时间维度。Druid 包含了专门针对时间进行优化的设计。
- 您可能有多个表,但每个查询仅命中一个大型分布式表。查询可能会命中一个或多个较小的“查找 (lookup)”表。
- 您拥有高基数数据列(例如 URL、用户 ID),并且需要对其进行快速计数和排名。
- 您希望从 Kafka、HDFS、平面文件或 Amazon S3 等对象存储中加载数据。
在以下情况下,您可能不希望使用 Druid:
- 您需要使用主键对现有记录进行低延迟更新。Druid 支持流式插入,但不支持流式更新。您可以通过后台批处理作业执行更新。
- 您正在构建一个对查询延迟要求不高的离线报告系统。
- 您想要执行“大型”连接 (Join),即连接一个大型事实表到另一个大型事实表,并且您不介意这些查询需要很长时间才能完成。
了解更多
- 尝试 Druid 快速入门。
- 在 设计 部分了解更多关于 Druid 组件的信息。
- 在 Druid 发布说明 中阅读关于新特性和改进的信息。