Druid.io——概述

概述

1、Druid是什么?

Druid 是一个分布式的支持实时分析的数据存储系统(Data Store)。在处理数据的规模、数据处理的实时性方面,比传统的OLAP 系统有了显著的性能改进,而且拥抱主流的开源生态,包括Hadoop 等。Druid通常作为强大的分析交互系统的后端存储组件,或者为高并发API提供快速的聚合的能力

从技术定位上看,Druid 是一个分布式的数据分析平台,在功能上也非常像传统的OLAP系统,但是在实现方式上做了很多聚焦和取舍,为了支持更大的数据量、更灵活的分布式部署、更实时的数据摄入,Druid 舍去了OLAP 查询中比较复杂的操作,例如JOIN 。相比传统数据库,Druid 是一种时序数据库,按照一定的时间粒度对数据进行聚合,以加快分析查询。 

【注】数据分析的目标是探索并挖掘数据价值,作为企业高层进行决策的参考,通常被称为OLAP(On-Line Analytical Processing,联机分析处理)。

2、Druid的三个设计原则

  1. 快速查询(Fast Query)部分数据的聚合(Partial Aggregate)+ 内存化(In-emory)+ 索引(Index)。可以将原始数据按照一定的粒度聚合(如时间);数据内存化可提高数据访问速度,为有效使用内存,采用了Bitmap和各种压缩技术。为支持Drill-Down某些维度,Druid维护了一些倒排索引,可加快AND和OR等计算操作。 
  2. 水平扩展能力(Horizontal Scalability)分布式数据(Distributed Data)+ 并行化查询(Parallelizable Query)。 Druid 查询性能在很大程度上依赖于内存的优化使用。数据可以分布在多个节点的内存中,因此当数据增长的时候,可以通过简单增加机器的方式进行扩容。为了保持平衡,Druid按照时间范围把聚合数据进行分区处理。对于高基数的维度,只按照时间切分有时候是不够的(Druid 的每个Segment 不超过2000 万行),故Druid 还支持对Segment 进一步分区。 历史Segment 数据可以保存在深度存储系统中,存储系统可以是本地磁盘、HDFS 或远程的云服务。如果某些节点出现故障,则可借助Zookeeper 协调其他节点重新构造数据。Druid 的查询模块能够感知和处理集群的状态变化,查询总是在有效的集群架构中进行。集群上的查询可以进行灵活的水平扩展。Druid 内置提供了一些容易并行化的聚合操作,例如Count、Mean、Variance 和其他查询统计。对于一些无法并行化的操作,例如Median,Druid暂时不提供支持。在支持直方图(Histogram)方面,Druid 也是通过一些近似计算的方法进行支持,以保证Druid 整体的查询性能,这些近似计算方法还包括HyperLoglog、DataSketches的一些基数计算。
  3. 实时分析(Realtime Analytics)不可变的过去 + 只追加的未来(Immutable Past,Append-Only Future)。Druid 提供了包含基于时间维度数据的存储服务,并且任何一行数据都是历史真实发生的事件,因此在设计之初就约定事件一但进入系统,就不能再改变。 对于历史数据Druid 以Segment 数据文件的方式组织,并且将它们存储到深度存储系统中,例如文件系统或亚马逊的S3 等。当需要查询这些数据的时候,Druid 再从深度存储系统中将它们装载到内存供查询使用。

3、Druid的技术特点

  1. 数据吞吐量大:每天处理几十亿到几百亿的事件,对于Druid 来说是非常适合的场景,目前已被大量互联网公司实践。因此,很多公司选型Druid 是为了解决数据爆炸的问题。
  2. 支持流式数据摄入:很多数据分析软件在吞吐量和流式能力上做了很多平衡,比如Hadoop 更加青睐批量处理,而Storm 则是一个流式计算平台,真正在分析平台层面上直接对接各种流式数据源的系统并不多。
  3. 查询灵活且快:Druid 支持在任何维度组合上进行查询,访问速度极快,成为分析平台最重要的两个杀手锏。
  4. 社区支持粒度大

4、Druid的应用场景

  • 点击流分析(Clickstream analytics,web和移动分析)
  • 网络流分析(Network telemetry analytics ,网络性能监控)
  • 服务器指标存储(Server metrics storage)
  • 供应链分析(Supply chain analytics,制造指标)
  • 应用性能指标(Application performance metrics)
  • 数字营销/广告分析(Digital marketing/advertising analytics)
  • 商业智能/OLAP 

Druid适用于以下场景

  • 插入率很高,但通常不进行更新
  • 大部分查询请求是聚合查询和报表类查询(group by类查询);也支持搜索和扫描查询
  • 预期查询延迟为100毫秒到几秒
  • 数据是基于时间组织的(Druid对时间处理做了专门的优化)
  • 可以有多个表,但是每次查询只命中一个大型分布式表。查询也可能命中多个较小的查找表(lookup)(但是需要的时候可以join一些小的信息表。)
  • 具有高基数数据列(如url或userid),同时需要快速计算并对其排序
  • 希望从kafka,HDFS,普通文件,或者类似于Amazon S3的对象存储中加载数据

Druid不适用于以下场景

  • 需要使用主键对已有的数据进行低延迟更新。Druid支持流式插入,但不支持流式更新(更新通过后台批处理作业完成)
  • 需要建立一个离线的报表系统,其查询延迟并不重要
  • 需要对多个大表进行join操作,这些查询需要花费数小时才能完成

5、Druid的核心特征

  1. 列式存储格式:Druid采用列式存储格式,因此它只会加载特定查询所需要的特定列的数据。这就极大的提高了只访问几列数据的查询。此外,每列的存储都针对其特定的数据类型进行了优化,以支持快速扫描和聚合。
  2. 可扩展的分布式系统:Druid通常被部署到包含几十到几百台的服务器的集群上,每秒可以支持摄入数百万条记录,存储规模可达数万亿条,以及亚秒级到秒级的查询延迟。
  3. 强大的并行处理能力:Druid可以在整个集群中并行处理查询。
  4. 实时或批量数据摄入:Druid可以支持实时数据摄入(摄入的数据可以被立即查询到),也可以支持批量摄入。
  5. 高度容错,自动负载均衡,以及低操作门槛:Druid支持不停机扩缩容。对于运维来说,可以通过简单的增加或删除集群中的机器来轻松地扩展或者收缩集群规模,集群将会自动在后台进行重新负载均衡。当某一台服务器出现问题时,集群将自动下线该服务器直到该服务器恢复正常或者被替换。Druid支持7*24小时在线服务,即使在软件升级或者配置变更的情况下,也不需要下线。
  6. 云原生设计,高度容错的架构以确保不丢失数据:一旦Druid接收了数据,数据副本将会被安全的存储在深度存储中(deep storage,通常是云存储,HDFS,或者一个共享的文件系统)。即使所有的Druid服务器都出现问题,Druid也有能力从深度存储中自动恢复数据。除了深度存储外,Druid还支持多副本,当个别服务器出现问题时,Druid的多副本保证查询服务不受影响。
  7. 建立索引以支持快速过滤:Druid使用CONCISE和Roaring位图压缩算法来创建索引,这些算法保证在跨列过滤时能够进行非常快速的查询。
  8. 基于时间的分区:Druid首先按时间对数据进行分区,并且可以根据其他字段进行额外的分区。这意味着基于时间的查询将只访问与查询时间范围匹配的分区。这将显著提高基于时间的数据的性能。
  9. 近似算法:Druid实现了快速支持count-distinct(近似非重复计数), ranking(近似排序), 近似直方图以及百分比等近似算法。这些近似算法可以在有限内存的情况下进行快速的计算。对于那些精度比速度更重要的场景,druid也提供了精确的count-distinct和ranking算法。
  10. 在摄入数据时自动汇总:Druid可以在摄入数据时对数据进行自动汇总。这种汇总操作可以对你的数据进行部分预聚合,因此可以极大降低存储成本和提升查询时的速度。

参考资料:

转载于:https://my.oschina.net/liyurong/blog/3071573

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值