Apache Druid 是一个高性能的实时分析型数据库。
Apache Druid 适用于对实时数据提取,高性能查询和高可用要求较高的场景。因此,Druid 通常被作为一个具有丰富 GUI 的分析系统,或者作为一个需要快速聚合的高并发 API 的后台。Druid 更适合面向事件数据。
比较常见的使用场景:
下面将详细分析这些使用场景:
Druid 经常用在点击流,访问流,和活动流数据上。具体场景包括:衡量用户参与度,为产品发布追踪 A/B 测试数据,并了解用户使用方式。Druid 可以做到精确和近似计算用户指标,例如不重复计数指标。这意味着,如日活用户指标可以在一秒钟计算出近似值(平均精度 98%),以查看总体趋势,或精确计算以展示给利益相关者。Druid 可以用来做“漏斗分析”,去测量有多少用户做了某种操作,而没有做另一个操作。这对产品追踪用户注册十分有用。
Druid 常常用来收集和分析网络流数据。Druid 被用于管理以任意属性切分组合的流数据。Druid 能够提取大量网络流记录,并且能够在查询时快速对数十个属性组合和排序,这有助于网络流分析。这些属性包括一些核心属性,如 IP 和端口号,也包括一些额外添加的强化属性,如地理位置,服务,应用,设备和 ASN。Druid 能够处理非固定模式,这意味着你可以添加任何你想要的属性。
Druid 常常用来存储和查询在线广告数据。这些数据通常来自广告服务商,它对衡量和理解广告活动效果,点击穿透率,转换率(消耗率)等指标至关重要。
Druid 最初就是被设计成一个面向广告数据的强大的面向用户的分析型应用程序。在存储广告数据方面,Druid 已经有大量生产实践,全世界有大量用户在上千台服务器上存储了 PB 级数据。
Druid 常常用于追踪应用程序生成的可运营数据。和用户活动使用场景类似,这些数据可以是关于用户怎样和应用程序交互的,它可以是应用程序自身上报的指标数据。Druid 可用于下钻发现应用程序不同组件的性能如何,定位瓶颈,和发现问题。
不像许多传统解决方案,Druid 具有更小存储容量,更小复杂度,更大数据吞吐的特点。它可以快速分析数以千计属性的应用事件,并计算复杂的加载,性能,利用率指标。比如,基于百分之 95 查询延迟的 API 终端。我们可以以任何临时属性组织和切分数据,如以天为时间切分数据,如以用户画像统计,如按数据中心位置统计。
Driud 可以作为时间序列数据库解决方案,来存储处理服务器和设备的指标数据。收集机器生成的实时数据,执行快速临时的分析,去估量性能,优化硬件资源,和定位问题。
和许多传统时间序列数据库不同,Druid 本质上是一个分析引擎。Druid 融合了时间序列数据库,列式分析数据库,和检索系统的理念。它在单个系统中支持了基于时间分区,列式存储,和搜索索引。这意味着基于时间的查询,数字聚合,和检索过滤查询都会特别快。
你可以在你的指标中包括百万唯一维度值,并随意按任何维度组合 group 和 filter(Druid 中的 dimension 维度类似于时间序列数据库中的 tag)。你可以基于 tag group 和 rank,并计算大量复杂的指标。而且你在 tag 上检索和过滤会比传统时间序列数据库更快。
Druid 经常用于商业智能场景。公司部署 Druid 去加速查询和增强应用。和基于 Hadoop 的 SQL 引擎(如 Presto 或 Hive)不同,Druid 为高并发和亚秒级查询而设计,通过 UI 强化交互式数据查询。这使得 Druid 更适合做真实的可视化交互分析。
Apache Druid 是一个开源的分布式数据存储引擎。Druid 的核心设计融合了 OLAP/analytic databases,timeseries database,和 search systems 的理念,以创造一个适用广泛用例的统一系统。Druid 将这三种系统的主要特性融合进 Druid 的 ingestion layer(数据摄入层),storage format(存储格式化层),querying layer(查询层),和 core architecture(核心架构)中。
img
Druid 的主要特性包括:
Druid 同时支持流式和批量数据摄入。Druid 通常通过像 Kafka 这样的消息总线(加载流式数据)或通过像 HDFS 这样的分布式文件系统(加载批量数据)来连接原始数据源。
Druid 通过 Indexing 处理将原始数据以 segment 的方式存储在数据节点,segment 是一种查询优化的数据结构。
img
像大多数分析型数据库一样,Druid 采用列式存储。根据不同列的数据类型(string,number 等),Druid 对其使用不同的压缩和编码方式。Druid 也会针对不同的列类型构建不同类型的索引。
类似于检索系统,Druid 为 string 列创建反向索引,以达到更快速的搜索和过滤。类似于时间序列数据库,Druid 基于时间对数据进行智能分区,以达到更快的基于时间的查询。
不像大多数传统系统,Druid 可以在数据摄入前对数据进行预聚合。这种预聚合操作被称之为 rollup,这样就可以显著的节省存储成本。
img
Druid 支持 JSON-over-HTTP 和 SQL 两种查询方式。除了标准的 SQL 操作外,Druid 还支持大量的唯一性操作,利用 Druid 提供的算法套件可以快速的进行计数,排名和分位数计算。
img
Druid 是微服务架构,可以理解为一个拆解成多个服务的数据库。Druid 的每一个核心服务(ingestion(摄入服务),querying(查询服务),和 coordination(协调服务))都可以单独部署或联合部署在商业硬件上。
Druid 清晰的命名每一个服务,以确保运维人员可以根据使用情况和负载情况很好地调整相应服务的参数。例如,当负载需要时,运维人员可以给数据摄入服务更多的资源而减少数据查询服务的资源。
Druid 可以独立失败而不影响其他服务的运行。
diagram-7
Drui 被设计成一个健壮的系统,它需要 7*24 小时运行。Druid 拥有以下特性,以确保长期运行,并保证数据不丢失。