Druid 实时数据分析存储系统

简介

Druid 是一个开源的,分布式的,列存储的,适用于实时数据分析的存储系统,能够快速聚合、灵活过滤、毫秒级查询、和低延迟数据导入。

Druid在设计时充分考虑到了高可用性,各种节点挂掉都不会使得druid停止工作(但是状态会无法更新);

Druid中的各个组成部分之间耦合性低,如果不需要实时数据完全可以忽略实时节点;

Druid使用Bitmap indexing加速列存储的查询速度,并使用CONCISE算法来对bitmap indexing进行压缩,使得生成的segments比原始文本文件小很多;

架构

整体架构

Druid集群包含不同类型的节点,而每种节点都被设计来做好某组事情。这样的设计可以隔离关注并简化整个系统的复杂度。

不同节点的运转几乎都是独立的并且和其他的节点有着最小化的交互,因此集群内的通信故障对于数据可用性的影响非常小。

Druid集群的构成和数据流向如图1所示:

(图1)

Druid 本身包含了五种节点 : Realtime、Historical、Coordinator、Broker、Indexer

Historical 历史节点是进行存储和查询的“历史”数据(非实时)的工作区,它会从深存储区(Deep Storage)中加载数据段(Data/Segments),响应 Broker 节点的查询请求并返回结果。历史节点通常会在本机同步深存储区上的部分数据段,所以即使深存储区不可访问了,历史节点还是能查询到已经同步的数据段。

Realtime 实时节点是进行存储和查询实时数据的工作区,它也会响应Broker节点的查询请求并返回结果 。实时节点会定期地将数据建立成数据段移到历史节点中。

Coordinator 协调节点可以认为是Druid中的master,它通过Zookeeper管理历史节点和实时节点,且通过Mysql中的metadata管理数据段。

Broker节点负责响应外部的查询请求,通过查询Zookeeper将请求分别转发给历史节点和实时节点,最终合并并返回查询结果给外部, 由Broker节点通过zookeeper决定哪些历史节点和实时节点提供服务。

Indexer 索引节点负责数据导入,加载批次和实时数据到系统中,并可以修改存储到系统中的数据 。

Druid 包含3个外部依赖 :Mysql、Deep storage、Zookeeper

Mysql:存储关于Druid中的metadata而不是存储实际数据,包含3张表:”druid_config”(通常是空的), “druid_rules”(协作节点使用的一些规则信息,比如哪个segment从哪个node去load)和“druid_segments”(存储每个segment的metadata信息);

Deep storage: 存储segments,Druid目前已经支持本地磁盘,NFS挂载磁盘,HDFS,S3等。Deep Storage的数据有2个来源,一个是批数据摄入, 另一个来自实时节点;

ZooKeeper: 被Druid用于管理当前cluster的状态,比如记录哪些segments从实时节点移到了历史节点;

实时节点

实时节点封装了导入和查询事件数据的功能,经由这些节点导入的事件数据可以立刻被查询。实时节点只关心一小段时间内的事件数据,并定期把这段时间内收集的这批数据导入到深存储区里。实时节点通过Zookeeper来宣布它们的在线状态和它们提供的数据。

如图2,实时节点缓存事件数据到内存中的索引上,然后有规律的持久化到磁盘上。在转移之前,持久化的索引会周期性地合并在一起。查询会同时命中内存中的和已持久化的索引。所有的实时节点都会周期性的启动后台的计划任务搜索本地的持久化索引,后台计划任务将这些持久化的索引合并到一起并生成一块不可变的数据,这些数据块包含了一段时间内的所有已经由实时节点导入的事件数据,称这些数据块为”Segment”。在传送阶段,实时节点将这些segment上传到一个永久持久化的备份存储中,通常是一个分布式文件系统,例如S3或者HDFS,称之为”Deep Storage”(深存储区)。

历史节点

历史节点遵循shared-nothing的架构,因此节点间没有单点问题。节点间是相互独立的并且提供的服务也是简单的,它们只需要知道如何加载、删除和处理Segment。类似于实时节点,历史节点在Zookeeper中通告它们的在线状态和为哪些数据提供服务。加载和删除segment的指令会通过Zookeeper来进行发布,指令会包含segment保存在deep storage的什么地方和怎么解压、处理这些segment的相关信息。

如图3,在历史节点从深存储区下载某一segment之前,它会先检查本地缓存信息中看segment是否已经存在于节点中,如果segment还不存在缓存中,历史节点会从深存储区下载segment到本地。这阶段处理完成,这个segment就会在Zookeeper中进行通告。此时,这个segment就可以被查询了,查询之前需要将segment加载到内存中。

协调节点

协调节点主要负责Segment的管理和在历史节点上的分布。协调节点告诉历史节点加载新数据、卸载过期数据、复制数据、和为了负载均衡移动数据。Druid为了维持稳定的视图,使用一个多版本的并发控制交换协议来管理不可变的segment。如果任何不可变的segment包含的数据已经被新的segment完全淘汰了,则过期的segment会从集群中卸载掉。协调节点会经历一个leader选举的过程,来决定由一个独立的节点来执行协调功能,其余的协调节点则作为冗余备份节点。

Broker节点

Broker节点是历史节点和实时节点的查询路由。Broker节点知道发布于Zookeeper中的segment的信息,Broker节点就可以将到来的查询请求路由到正确的历史节点或者是实时节点,Broker节点也会将历史节点和实时节点的局部结果进行合并,然后返回最终的合并后的结果给调用者。Broker节点包含一个支持LRU失效策略的缓存。

如图4,每次Broker节点接收到查询请求时,都会先将查询映射到一组segment中去。这一组确定的segment的结果可能已经存在于缓存中,而不需要重新计算。对于那些不存在于缓存的结果,Broker节点会将查询转发到正确的历史节点和实时节点中去,一旦历史节点返回结果,Broker节点会将这些结果缓存起来以供以后使用,这个过程如图6所示。实时数据永远不会被缓存,因此查询实时节点的数据的查询请求总是会被转发到实时节点上去。实时数据是不断变化的,因此缓存实时数据是不可靠的。

Indexer节点

索引服务是运行索引任务相关的高可用性,分布式的服务。索引服务创建(有时破坏)Druid的Segment。索引服务有一个类似主/从的架构。

索引服务是由三个主要部分组成:可以运行单个任务的peon组件,用于管理peon的中层管理组件,以及管理任务分配到中层管理组件的overlord组件。overlord组件和中层管理组件可以在同一节点上或跨多个节点上运行,而中层管理组件和peon组件总是相同的节点上运行。

ZooKeeper

Druid 使用ZooKeeper(ZK)管理当前集群状态,在ZK上发生的操作有:

1.协调节点的leader选举

2.历史和实时节点发布segment协议

3.协调节点和历史节点之间的segment Load/Drop协议

4.overlord的leader选举

5.索引服务任务管理

Druid vs 其他系统

Druid vs Impala/Shark

Druid和Impala、Shark 的比较基本上可以归结为需要设计什么样的系统

Druid被设计用于:

  1. 一直在线的服务
  2. 获取实时数据
  3. 处理slice-n-dice式的即时查询

查询速度不同:

Druid是列存储方式,数据经过压缩加入到索引结构中,压缩增加了RAM中的数据存储能力,能够使RAM适应更多的数据快速存取。索引结构意味着,当添加过滤器来查询,Druid少做一些处理,将会查询的更快。

Impala/Shark可以认为是HDFS之上的后台程序缓存层。 但是他们没有超越缓存功能,真正的提高查询速度。

数据的获取不同:

Druid可以获取实时数据。

Impala/Shark是基于HDFS或者其他后备存储,限制了数据获取的速度。

查询的形式不同:

Druid支持时间序列和groupby样式的查询,但不支持join。

Impala/Shark支持SQL样式的查询。

Druid vs Elasticsearch

Elasticsearch(ES) 是基于Apache Lucene的搜索服务器。它提供了全文搜索的模式,并提供了访问原始事件级数据。 Elasticsearch还提供了分析和汇总支持。根据研究,ES在数据获取和聚集用的资源比在Druid高。

Druid侧重于OLAP工作流程。Druid是高性能(快速聚集和获取)以较低的成本进行了优化,并支持广泛的分析操作。Druid提供了结构化的事件数据的一些基本的搜索支持。

Druid vs Spark

Spark是围绕弹性分布式数据集( RDD )的概念,建立了一个集群计算框架,可以被看作是一个后台分析平台。 RDD启用数据复用保持中间结果存在内存中,给Spark提供快速计算的迭代算法。这对于某些工作流程,如机器学习,相同的操作可应用一遍又一遍,直到有结果后收敛尤其有益。Spark提供分析师与不同算法各种各样运行查询和分析大量数据的能力。

Druid重点是数据获取和提供查询数据的服务,如果建立一个web界面,用户可以随意查看数据。

引用

论文: Druid A Real-time Analytical Data Store

官方文档:http://druid.io/docs/0.8.1/design/index.html

文章转载自 开源中国社区[https://www.oschina.net]

时间: 2025-01-30 16:26:51

Druid 实时数据分析存储系统的相关文章

快速了解Druid——实时大数据分析软件

Druid 是什么 Druid 单词来源于西方古罗马的神话人物,中文常常翻译成德鲁伊. 本问介绍的Druid 是一个分布式的支持实时分析的数据存储系统(Data Store).美国广告技术公司MetaMarkets 于2011 年创建了Druid 项目,并且于2012 年晚期开源了Druid 项目.Druid 设计之初的想法就是为分析而生,它在处理数据的规模.数据处理的实时性方面,比传统的OLAP 系统有了显著的性能改进,而且拥抱主流的开源生态,包括Hadoop 等.多年以来,Druid 一直是

【CSDN在线培训Q/A】Amazon Kinesis实时数据分析最佳实践分享

问题描述 1月8日,亚马逊AWS的产品拓展经理庄富任在主题为"AmazonKinesis实时数据分析最佳实践分享"的在线培训中,为我们讲述了如何利用Kinesis架构实时数据流处理和分析的能力,并透过目前最热门的手游开发商Supercell客户案例,来体现Kinesis如何处理和分析海量数据流(例如用户的点击,消费,上线等动作).为了帮助大家更好的复习本次培训的相关内容,了解如何在AWS这样的云平台进行数据分析.CSDN整理了本次培训最后的QA,如下:Q1.目前Strom的社区进展缓慢

阿里首次披露中台战略:OneData的统一数据标准和实时数据分析是核心

"阿里巴巴正在建设数据中台,统一处理集团近千PB数据,每天被扫描的数据量相当于2千万部高清电影.目前对外服务千万商家与其它生态伙伴,对内服务上万名小二,2015年双十一当天平台调用超过75亿次." 阿里巴巴公共数据平台负责人 罗金鹏  4月20日, UBDC全域大数据峰会·2016上,阿里巴巴公共数据平台负责人罗金鹏首次对外披露了在阿里中台战略下,如何推动数据中台落地的个中细节.   据悉,中台战略是阿里巴巴于2015年底首次提出.作为阿里中台战略的核心之一--数据中台旨在对内提供数据

实时数据分析公司如何颠覆唱片行业?

 实时数据分析就是技术界传说中的大王乌贼:确实有公司在做实时数据分析,却难觅其踪迹. Mixcloud,这一流媒体音频内容的在线平台就是这种神秘生物的一员.这家总部位于伦敦被称作"音频YouTube"的创业公司,不仅使用实时分析以做出快速的业务决策并创造更好的产品,而且在致力于构建一个面向客户的实时数据分析门户网站.Mixcloud首席技术官,也是四个创始人之一的Mat Clayton说,当这个门户网站完成以后, Mixcloud的客户将能够看到是谁在何时收听他们音乐目录.   200

LSI总裁:企业迫切需要实时数据分析解决方案

摘要: LSI公司总裁兼首席执行官 Abhi Talwalkar 近日,在第六届年度加速创新峰会(AIS)上,LSI公司总裁兼首席执行官Abhi Talwalkar提出,数据中心从未像今天这样,对企业的成功有如此巨大的战略 LSI公司总裁兼首席执行官 Abhi Talwalkar 近日,在第六届年度加速创新峰会(AIS)上,LSI公司总裁兼首席执行官Abhi Talwalkar提出,数据中心从未像今天这样,对企业的成功有如此巨大的战略意义,企业迫切需要实时数据分析解决方案. 本届AIS峰会主要围

实时数据分析平台Anametrix走红

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近实时数据分析炒得很热,因为大家越来越明白数据生金的道理了. Anametrix实时数据平台刚刚获得440万美元的A轮融资,公司准备把这些融资用于增加更多资源,以便满足用户越来越多的市场分析需求. 市场营销人员最高兴的就是这个工具能够抓取各类活跃的项目数据,再统一分析,进行管理,进而做聪明人生意,而你只需一个Anametrix帮你负责处理数

Logstash + DataHub + MaxCompute/StreamCompute 进行实时数据分析

Logstash是一款开源日志收集处理框架,有各种不同的input.filter.output插件,用户使用这些插件可以将各种数据源导入到其他系统. logstash-output-datahub插件,实现将数据导入DataHub的功能,通过简单的配置即可完成数据采集和向DataHub的传输任务. 结合StreamCompute(Galaxy)用户可以方便的完成流式数据从采集,传输,开发到结果数据存储与展示的整套解决方案. 同时,还可以通过创建Collector同步任务将数据同步到MaxComp

[转]程序员资料整理

前言 一些主流技术资源整理. 目录 资料篇 技术站点 必看书籍 大牛博客 GitHub篇 工具篇 平台工具 常用工具 第三方服务 爬虫相关(好玩的工具) 安全相关 Web服务器性能/压力测试工具/负载均衡器 大数据处理/数据分析/分布式工具 Web前端 语言篇 Scala Java Python Swift .NET C & C++ 其他 游戏开发相关 日志聚合,分布式日志收集 RTP,实时传输协议与音视频 资料篇 技术站点 在线学习:Coursera.edX.Udacity.MIT公开课.MO

Druid 在小米公司部分技术实践

引言:Druid作为一款开源的实时大数据分析软件,自诞生以来,凭借自己优秀的特质,不仅逐渐在技术圈收获了越来越多的知名度与口碑,并且陆续成为了很多技术团队解决方案中的关键一环,从而真正在很多公司的技术栈中赢得了一席之地. 本文通过对小米公司技术团队对Druid 的实践案例与经验的介绍,让大家对Druid有更加全面和深入的了解,希望能够帮助你事半功倍地学习Druid 这项年轻的技术. 本文选自<Druid实时大数据分析原理与实践>. 小米公司正式成立于2010 年4 月,是一家专注于高端智能手机