Druid 介绍和应用

Druid(Druid.io)简介

一、简介

Druid 的目标是提供一个能够在大数据集上做实时数据摄入与查询的平台,然而对于大多数系统而言,提供数据的快速摄入与提供快速查询是难以同时实现的两个指标。而Druid却可以完美的对两者进行结合,本文将对Druid如何实现这种结合做一个简单的介绍。

Druid.io是一个开源的,分布式的,列式存储的,适用于实时数据分析的OLAP系统。它能够快速聚合、灵活过滤、毫秒级查询、和低延迟数据导入。2011年,MetaMarkets公司为了解决广告交易中海量实时数据的分析问题,在尝试各种SQL和NoSQL方案后,决定自行设计并创建Druid并于2013年开源。Druid被设计成支持PB级别数据量每天处理数十亿流式事件。Druid之所以保持高效有以下几个原因:

  • 数据进行了有效的预聚合或预计算。
  • 数据结果的优化,应用了Bitmap的压缩算法。
  • 可扩展的高可用架构,灵活的支持部署和扩展。
  • 社区的力量,Druid开发和用户社区保持活跃,不断推动Druid完善和改进。

二、技术特点

1 数据吞吐量大

  很多公司选择Druid 作为分析平台,都是看中Druid 的数据吞吐能力。每天处理几十亿到几百亿的事件,对于Druid 来说是非常适合的场景,目前已被大量互联网公司实践。因此,很多公司选型Druid 是为了解决数据爆炸的问题。

2 支持流式数据摄入

  很多数据分析软件在吞吐量和流式能力上做了很多平衡,比如Hadoop 更加青睐批量处理,而Storm 则是一个流式计算平台,真正在分析平台层面上直接对接各种流式数据源的系统并不多。

3 查询灵活且快

  数据分析师的想法经常是天马行空,希望从不同的角度去分析数据,为了解决这个问题,OLAP 的Star Schema 实际上就定义了一个很好的空间,让数据分析师自由探索数据。数据量小的时候,一切安好,但是数据量变大后,不能秒级返回结果的分析系统都是被诟病的对象。因此,Druid 支持在任何维度组合上进行查询,访问速度极快,成为分析平台最重要的两个杀手锏。

4 数据不支持修改

Druid在设计上做为时序库设计,用来记录过去时间发生的事件,历史发生的是不可改变。也根据该特点, Druid在数据存储上可以做更多的操作。同时Druid在对数据删除上支持也比较弱,不支持对单条数据的删除,只能单个分片的数据(即单个segment)进行删除。

三、核心特征

  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实现了快速支持count-distinct, ranking, 直方图以及百分比等近似算法。这些近似算法可以在有限内存的情况下进行快速的计算。对于那些精度比速度更重要的场景,druid也提供了精确的count-distinct和ranking算法。
  9. 在导入数据时自动汇总:Druid可以在导入数据的使用对数据进行自动汇总。这种汇总操作可以对你的数据进行部分预聚合,因此可以极大降低存储成本和提升查询时的速度。

四、应用场景

Druid是可以在大数据集上面进行交叉分析的高性能OLAP系统。Druid通常作为强大的分析交互系统的后端存储组件,或者为高并发API提供快速的聚合的能力。druid的典型应用场景如下:

  • 点击流分析(Clickstream analytics)
  • 网络流分析(Network flow analytics)
  • 存储服务器指标(Server metrics storage)
  • 应用性能指标(Application performance metrics)
  • 数字市场分析(Digital marketing analytics)
  • 商业智能和OLAP

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

小米:Druid用于小米统计的部分后台数据收集和分析;另外,在广告平台的数据分析方面,Druid也提供了实时的内部分析功能,支持细粒度的多维度查询

新浪微博:新浪微博的广告团队使用Druid构建数据洞察系统的实时分析部分,每天处理数十亿的消息

滴滴打车:Druid是滴滴实时大数据处理的核心模块,用于滴滴的实时监控系统,支持数百个关键业务指标。

腾讯:腾讯的腾讯企点采用了Druid,用于分析大量的用户行为,帮助提升客户的价值

五、为什么会有Druid

大数据时代,如何从海量数据中提取有价值的信息,是一个亟待解决的难题。针对这个问题,IT巨头们已经开发了大量的数据存储与分析类产品,比如IBM Netezza、HP Vertica、EMC GreenPlum等,但是他们大多是昂贵的商业付费类产品,业内使用者寥寥。

而受益于近年来高涨的开源精神,业内出现了众多优秀的开源项目,其中最有名的当属Apache Hadoop生态圈。时至今日,Hadoop已经成为了大数据的“标准”解决方案,但是,人们在享受Hadoop便捷数据分析的同时,也必须要忍受Hadoop在设计上的许多“痛点”,下面就罗列三方面的问题:

  • 1.何时能进行数据查询? 对于Hadoop使用的Map/Reduce批处理框架,数据何时能够查询没有性能保证。

  • 2.随机IO问题。 Map/Reduce批处理框架所处理的数据需要存储在HDFS上,而HDFS是一个以集群硬盘作为存储资源池的分布式文件系统,那么在海量数据的处理过程中,必然会引起大量的读写操作,此时随机IO就成为了高并发场景下的性能瓶颈。

  • 3.数据可视化问题。 HDFS是一个优秀的分布式文件系统,但是对于数据分析以及数据的即席查询,HDFS并不是最优的选择。

传统的大数据处理架构Hadoop更倾向于一种“后台批处理的数据仓库系统”,其作为海量历史数据保存、冷数据分析,确实是一个优秀的通用解决方案,但是如何保证高并发环境下海量数据的查询分析性能,以及如何实现海量实时数据的查询分析与可视化,Hadoop确实显得有些无能为力。

六、Druid直面的痛点

Druid的母公司MetaMarket在2011年以前也是Hadoop的拥趸者,但是在高并发环境下,Hadoop并不能对数据可用性以及查询性能给出产品级别的保证,使得MetaMarket必须去寻找新的解决方案,当尝试使用了各种关系型数据库以及NoSQL产品后,他们觉得这些已有的工具都不能解决他们的“痛点”,所以决定在2011年开始研发自己的“轮子”Druid,他们将Druid定义为“开源、分布式、面向列式存储的实时分析数据存储系统”,所要解决的“痛点”也是上文中反复提及的“在高并发环境下,保证海量数据查询分析性能,同时又提供海量实时数据的查询、分析与可视化功能”。

七、什么时候应该使用Druid

  • 1.如果您的用例符合以下几个描述符,Druid可能是一个不错的选择:

    • 插入率非常高,但更新不常见。

    • 您的大多数查询都是聚合和报告查询(“分组依据”查询)。您可能还有搜索和扫描查询。

    • 您将查询延迟定位为100毫秒到几秒钟。

    • 您的数据有一个时间组件(Druid包括与时间特别相关的优化和设计选择)。

    • 您可能有多个表,但每个查询只能访问一个大的分布式表。查询可能会触发多个较小的“查找”表。

    • 您有高基数数据列(例如URL,用户ID),需要对它们进行快速计数和排名。

    • 您希望从Kafka,HDFS,平面文件或对象存储(如Amazon S3)加载数据。

    • 实时数据接入可容忍丢数据(tranquility):目前 tranquility 有丢数据的风险,所以建议实时和离线一起用,实时接当天数据,离线第二天把今天的数据全部覆盖,保证数据完备性。

    • OLAP 查询而不是 OLTP 查询:Druid 查询并发有限,不适合 OLTP 查询。

    • 非精确的去重计算:目前 Druid 的去重都是非精确的。

    • 无 Join 操作:Druid 适合处理星型模型的数据,不支持关联操作。

  • 2.情况下,您可能会不希望使用Druid包括:

    • 您需要使用主键对现有记录进行低延迟更新。Druid支持流式插入,但不支持流式更新(使用后台批处理作业进行更新)。

    • 您正在构建一个脱机报告系统,其中查询延迟不是很重要。

    • 你想做“大”连接(将一个大事实表连接到另一个大事实表)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值