Apache Druid
官方文档:https://druid.apache.org/docs/latest/design/index.html
Apache Druid 介绍
Apache Druid 是一个实时分析数据库 real-time analytics database,用于对大型数据集进行快速切片分析(OLAP 查询)。在实时摄入(数据)、快查询表现、长时间正常运行(high uptime)等方面要求很高的场景,Druid 发挥作用。
Druid 通常作为分析系统的 GUI、需要快速聚合的高并发 apis 的后端数据库。Druid 最适合处理面向事件的数据。
Druid 的
常见应用领域
;
- 包括 web、手机在内的点击流分析
- 包括网络性能监控在内的网络遥测分析
- 服务器指标存储
- 包括生产指标在内的供应链分析
- 应用程序表现指标
- 数字化营销/广告分析
- 商业智能 BI /联机分析处理 OLAP
Druid 的
主要特点 key features
- 列式存储。并且 Druid 会根据列的数据类型优化列存储,以支持快速扫描和聚合
- 可扩展的分布式系统。Druid 的经典集群配置是几十到几百个服务器。Druid 可以以每秒数百万条记录的速度摄入数据,同时保存几万亿条记录,并保持次秒(<1秒)到几秒的查询延迟。
- 大规模并行处理 Massively parallel processing。可以在集群中并行处理每个查询。
- 实时/批量摄入数据,摄取的数据可以立即用于查询
- 自愈合 self-healing,自平衡,操作方便。您可以随意地通过增加/减少服务器来扩展/缩小集群规模。Druid 集群会在后台自动重新平衡集群,不需要任何停机时间。如果某个 Druid 服务器无法正常工作,系统会自动分发数据到其他正常节点,直到损坏节点被替换。德鲁伊被设计成可以连续运行,而不会因为任何原因而计划停机。这对于配置更改和软件更新来说很重要。
- 保证了不会丢失数据的本地云和容错体系结构。摄入数据后,德鲁伊将数据的副本安全地存储在深度存储 deep storage。深度存储通常是云存储、 HDFS 或共享文件系统。你可以从深度存储中恢复你的数据,即使在所有的 Druid 服务器都损坏的情况下。对于只影响少数几个 Druid 服务器的有限故障,副本可以确保在系统恢复期间仍然可以进行查询。
- 索引,快速过滤。Druid 使用 Roaring 或 CONSISE 的压缩位图索引,以支持快速筛选和跨多列搜索。
- 基于时间的分区 Time-based partition。Druid 首先按照时间来划分分区。您可以选择性地基于其他字段实现额外的分区。因此,基于时间的查询将只访问与查询的时间范围相匹配的分区,带来显著的性能提升。
- 近似算法 Approximate algorithms。Druid 包括近似的去重计数算法,近似排名算法,并计算近似直方图和分位数。这些算法使用有限的内存,通常比精确计算快得多。对于精确比速度更重要的情况,Druid 也提供了精确的统计、排序算法。
- 在摄入数据时,自动做数据汇总。这个汇总提前聚合了数据,可能导致成本节约和性能提升。
何时使用
Druid ?
如果您的情况和下面的一些匹配,Druid 可能是一个不错的选择
- 插入频率很高,更新频率很低。
- 大多数查询是聚合和报告查询 reporting query。例如“group by”查询。可能还有搜索和扫描查询。
- 查询延迟希望在100毫秒到几秒之间。
- 数据有一个时间列。Druid 对时间有特别的优化和设计选择。
- 查询只涉及一个大的分布式表,或多个小的表。
- 高基数数据列 high cardinality data columns。例如 urls、用户 id,并需要对它们进行快速计数和排序。
- 需要从 Kafka、HDFS、平面文件 flat files 或者像 Amazon S3 这样的对象存储 object storage 中加载数据。
您可能不想使用 Druid 的情况有
- 需要通过主键对现有数据进行低延迟的更新。Druid 支持流式插入,但不支持流式更新。您可以通过后台批处理作业进行更新。
- 您正在构建的是一个离线报告系统,不要求低的查询延迟。
- 您希望执行“大”连接 “big” join,即一个大的事实表 join 另一个大的事实表,并可以接受该查询需要很长时间。