跳转到主要内容

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 的一些主要特性包括:

  1. 列式存储格式。 Druid 使用面向列的存储。这意味着它只加载特定查询所需的列,这极大地提高了仅检索少数几列的查询速度。此外,为了支持快速扫描和聚合,Druid 会根据每列的数据类型对其存储进行优化。
  2. 可扩展的分布式系统。 典型的 Druid 部署跨越数十到数百台服务器的集群。Druid 可以以每秒数百万条记录的速度摄取数据,同时保留数万亿条记录,并将查询延迟保持在亚秒级到几秒之间。
  3. 大规模并行处理。 Druid 可以在整个集群中并行处理每个查询。
  4. 实时或批量摄取。 Druid 可以实时或批量摄取数据。摄取的数据立即可用于查询。
  5. 自愈、自平衡,易于操作。 作为运维人员,您可以添加服务器以横向扩展或移除服务器以进行缩容。Druid 集群会在后台自动重新平衡,无需停机。如果 Druid 服务器发生故障,系统会自动绕过损坏部分,直到服务器被替换。Druid 的设计目标是持续运行,无需任何计划外停机。这同样适用于配置更改和软件更新。
  6. 云原生、容错且不会丢失数据的架构。 摄取后,Druid 会将您的数据副本安全地存储在 深度存储 (deep storage) 中。深度存储通常是云存储、HDFS 或共享文件系统。即使在所有 Druid 服务器都发生故障的极端情况下,您也可以从深度存储中恢复数据。对于仅影响少数 Druid 服务器的有限故障,副本机制确保了在系统恢复期间查询仍然可行。
  7. 用于快速过滤的索引。 Druid 使用 RoaringCONCISE 压缩位图索引来创建索引,从而实现跨多列的快速过滤和搜索。
  8. 基于时间的分区。 Druid 首先按时间对数据进行分区。您可以根据需要选择基于其他字段实施额外分区。基于时间的查询仅访问与查询时间范围匹配的分区,从而显著提高了性能。
  9. 近似算法。 Druid 包含用于近似计数去重 (count-distinct)、近似排名以及计算近似直方图和分位数的算法。这些算法提供受限的内存使用,通常比精确计算快得多。对于准确性重于速度的情况,Druid 也提供精确计数去重和精确排名。
  10. 摄取时的自动汇总。 Druid 可选支持在摄取时进行数据汇总。这种汇总会对您的数据进行部分预聚合,从而可能带来显著的成本节省和性能提升。

何时使用 Druid

许多不同规模的公司在许多不同的用例中使用 Druid。欲了解更多信息,请参阅 Powered by Apache Druid

如果您的用例符合以下几点,Druid 很可能是一个不错的选择:

  • 插入速率非常高,但更新频率较低。
  • 大多数查询是聚合和报表查询,例如“group by”查询。您也可能有搜索和扫描查询。
  • 您的目标查询延迟为 100 毫秒到几秒。
  • 您的数据具有时间维度。Druid 包含了专门针对时间进行优化的设计。
  • 您可能有多个表,但每个查询仅命中一个大型分布式表。查询可能会命中一个或多个较小的“查找 (lookup)”表。
  • 您拥有高基数数据列(例如 URL、用户 ID),并且需要对其进行快速计数和排名。
  • 您希望从 Kafka、HDFS、平面文件或 Amazon S3 等对象存储中加载数据。

在以下情况下,您可能希望使用 Druid:

  • 您需要使用主键对现有记录进行低延迟更新。Druid 支持流式插入,但不支持流式更新。您可以通过后台批处理作业执行更新。
  • 您正在构建一个对查询延迟要求不高的离线报告系统。
  • 您想要执行“大型”连接 (Join),即连接一个大型事实表到另一个大型事实表,并且您不介意这些查询需要很长时间才能完成。

了解更多