您当前的位置:首页 > 电脑百科 > 数据库 > 百科

Apache Druid 高性能的实时分析型数据库

时间:2021-01-12 12:43:42  来源:  作者:

目前广为人知的Druid有两个,一个是阿里巴巴开源的Durid数据库连接池,一个是MetaMarkets开源的分布式、实时多维OLAP分析的数据处理系统。

这篇文章将介绍后者,即Apache Druid。由美国广告技术公司MetaMarkets公司2012年开源,孵化于Apache。

一、Apache Druid 是什么?

Druid 是一个分布式的、支持实时多维 OLAP 分析的数据处理系统。它既支持高速的数据实时摄入处理,也支持实时且灵活的多维数据分析查询。因此 Druid 最常用的场景就是大数据背景下、灵活快速的多维 OLAP 分析。 另外,Druid 还有一个关键的特点:它支持根据时间戳对数据进行预聚合摄入和聚合分析,因此也有用户经常在有时序数据处理分析的场景中用到它。

Apache Druid 高性能的实时分析型数据库

 

二、Apache Druid基本特点

Druid是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析。分析和存储系统,提供极具成本效益并且永远在线的实时数据摄取和任意数据处理。

为分析而设计——Druid是为OLAP工作流的探索性分析而构建。它支持各种filter、aggregator和查询类型,并为添加新功能提供了一个框架。用户已经利用Druid的基础设施开发了高级查询和直方图功能。

交互式查询——Druid的低延迟数据摄取架构允许事件在它们创建后毫秒内查询,因为Druid的查询延时通过只读取和扫描有必要的元素被优化。Aggregate和 filter没有坐等结果。

高可用性——Druid是用来支持需要一直在线的SaaS的实现。你的数据在系统更新时依然可用、可查询。规模的扩大和缩小不会造成数据丢失。

可伸缩——现有的Druid部署每天处理数十亿事件和TB级数据。Druid被设计成PB级别。

 

Druid主要是解决低延迟下实时数据摄入与查询的平台,本质是一个数据存储。数据存储格式对一款存储系统来说是最核心的组件,Druid 的数据格式是自定义的,以此保证了在海量数据下的亚秒级查询。

Druid有如下一些特性:

1. 亚秒响应的交互式查询,支持较高并发。

2. 支持实时导入,导入即可被查询,支持高并发导入。

3. 采用分布式 shared-nothing 的架构,可以扩展到PB级。

4. 支持聚合函数,count 和 sum,以及使用 JAVAscript 实现自定义 UDF。

5. 支持复杂的 Aggregator,近似查询的 Aggregator,例如 HyperLoglog 以及 Yahoo 开源的 DataSketches。

6. 支持Groupby,Select,Search查询。

7. 不支持大表之间的Join,但其 lookup 功能满足和维度表的 Join。

Druid为什么查询速度快?

数据的预聚合:Druid 可以按照给定的时间粒度和所有维度列,进行最细粒度的指标聚合运算,并加以保存为原始数据。

列式存储:对部分列进行查询时可以显著提高效率。

Bitmap 索引:利用位图对所有维度列构建索引,可以快速定位数据行。

mmap:通过内存映射文件的方式加快对于 Segment 的访问。

查询结果的中间缓存:支持对于查询级别和 Segment 级别的缓存。

 

三、Druid使用场景

Druid适合于以下场景:

插入频繁,但很少更新。

大多数查询都是聚合和报告性质的查询(group by查询)以及搜索和扫描查询。

查询延迟要求为100毫秒到几秒。

数据中有一个时间组件(Druid包括具体与时间相关的优化和设计选择)。

有多个表,但每次查询只能访问一个大的分布式表,或者查询可能会遇到多个较小的“查找”表。

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

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

 

Druid不适用于以下场景:

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

需要构建一个离线报告系统,其中查询延迟不是很重要。

想做big joins(将一个大事实表连接到另一个大事实表),可能完成这些查询需要花费你几个小时。

 

四、Druid架构图

如图所示,分为三种服务器类型:主服务器(Master)、查询服务器(Query)和数据服务器(Data)。

Master:运行Coordinator和Overlord进程,管理数据可用性和摄取。

Query:运行Broker和可选的Router进程,处理来自外部客户端的查询。

Data:运行Historical和MiddleManager进程,运行数据的采集以及存储所有历史查询数据负载。

Apache Druid 高性能的实时分析型数据库

 

Druid有若干不同类型的进程,简单描述如下:

Coordinator 进程:负责集群 Segment 的管理和发布,并确保 Segment 在 Historical 集群中的负载均衡。

Overlord 进程:负责接受任务、协调任务的分配、创建任务锁以及收集、返回任务运行状态给客户端;通过设置 druid.Coordinator.asOverlord.enabled 属性,Coordinator进程和Overlord进程可以作为单个组合进程运行。让 Coordinator 具备 Overlord 功能,这样可以减少一个组件的部署和运维。

Broker 进程:负责从客户端接收查询请求,并将查询请求转发给 Historical 节点和 MiddleManager 节点。Broker 节点需要感知 Segment 信息在集群上的分布。

Router 进程:是一个可选进程,可以将请求路由到Brokers、Coordinators和Overlords。

Historical 进程:主要负责加载索引文件,同时提供历史数据的查询服务。

MiddleManager 进程:主要是负责数据索引,生成索引文件,并把索引文件先发布到一个共享的存储系统里,如普遍采用的 HDFS 系统。

 

在架构图中,最下面的部分是外部依赖。除了内置的进程类型外,Druid同时有三个外部依赖,它们旨在利用现有的基础设施。

(1)Metadata Storage

存储关于Druid中的Metadata,规则数据、配置数据等,主要包含以下几张表:

druid_config(通常是空的),druid_rules(协作节点使用的一些规则信息,比如哪个segment从哪个node去load),druid_segments(存储每个segment的metadata信息)。

生产环境中可以使用MySQL

 

(2)Zookeeper

分布式协调服务,用于节点管理和事件监控。

查询节点通过Zookeeper来感知实时节点和历史节点的存在,提供查询服务。

协调节点通过Zookeeper感知历史节点,实现负载均衡。

统治节点、协调节点的leader选举。

 

(2)Deep Storage

用于存储 Segment 文件供 Historical 节点下载。Deep Storage 不属于 Druid 内部组件,用户可根据系统规模来自定义配置。单节点可用本地磁盘,分布式可用 HDFS。

 

五、Druid的数据源和分段

Druid的数据存储在DataSource中,DataSource 是一个逻辑概念,表示 Druid 的基本数据结构,可以理解为关系型数据库中的表。它包含时间、维度和指标三列。

时间(TimeStamp):表明每行数据的时间值,默认使用 UTC 时间格式且精确到毫秒级别。这个列是数据聚合与范围查询的重要维度。

维度(Dimension):标识数据行的各个类别信息。

指标(Metric):用于聚合计算的列,这些指标列通常是一些数字,主要操作包括 Count、Sum 和 Mean 等。

 

每一个数据源按照时间进行分段,当然你还可以选择其他属性进行分段。

每一个时间区间被称为一个"Chunk"。举个例子,如果以天分区,则一个Chunk为一天。在一个Chunk内,数据被分成一个或者多个"segments"。每个segment是一个单独的文件,它由数以百万的数据行构成。因为segment是组织在时间Chunk里的,所以按照时间曲线有助于理解segments。

Apache Druid 高性能的实时分析型数据库

 

这些segment是按照时间组织成的Chunk,所以在按照时间查询数据时,效率非常高。

 

segment 是 Druid 中数据的实际物理存储格式,Druid 正是通过 segment 实现了对数据的横纵向切割(Slice and Dice)操作:

横向:通过参数 segmentGranularity 的设置,将不同时间范围内的数据存储在不同的 segment 数据块中。这样在指定时间范围内查询时,可以不用扫全表。

纵向:即列式存储,对每个列进行切分并压缩,且利用 Bitmap 构建索引从而优化数据访问。

 

一个数据源刚开始由几个segments组成,一直扩展到几百几千甚至上百万个segments。每个segment的生命周期始于被MiddleManager创建,这个时候segment是可变的没有被提交的。一个segment的构建包含以下列出来的几个步骤,这种设计是为了满足一个可以支持压缩并可以被快速查询的文件格式。

转换成列式存储格式

利用bitmap建立索引

利用多种算法进行压缩

segments会周期性地提交。此时它会被写入deep storage,然后状态改为不可变的。随后它会被从MiddleManager移动到Historical进程中去。与此同时,关于这个segment的一个条目也会被写入元数据存储。这个条目是描述该segment的元数据,包含segment的schema、大小、以及它在deep storage上的存储位置。所有这些类似的条目都会被Coordinator用来寻找对应的数据是否在集群上是可用状态的。

 

六、Druid应用实践

Druid当前最新版本为0.20。下载链接:http://druid.apache.org/downloads.html

Apache Druid 高性能的实时分析型数据库

 

Druid 有着很成熟的用户群体,包括国内外的知名企业,国外的话当属 Airbnb,这家公司在内部大量使用 Druid 来做分析,包括他们开源的知名 BI 工具 Apache Superset,也在其中专门为 Druid 写了一套 Query Engine。国内公司像阿里、小米、58都在用。



Tags:Apache Druid   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
目前广为人知的Druid有两个,一个是阿里巴巴开源的Durid数据库连接池,一个是MetaMarkets开源的分布式、实时多维OLAP分析的数据处理系统。这篇文章将介绍后者,即Apache Druid。...【详细内容】
2021-01-12  Tags: Apache Druid  点击:(278)  评论:(0)  加入收藏
最近几年大数据技术在各行各业得到广泛应用,为企业的运营决策和各种业务提供支持。随着数据的增长,业务对数据时效性的要求,给企业的大数据分析带来了巨大挑战。针对海量数据的...【详细内容】
2020-06-11  Tags: Apache Druid  点击:(40)  评论:(0)  加入收藏
> Photo by Carlos Muza on Unsplash Apache druid是最流行的在线分析处理(OLAP)开源解决方案之一。 Airbnb和Netflix等许多科技公司都使用它来对每分钟包含数百万个事件的数...【详细内容】
2020-04-17  Tags: Apache Druid  点击:(77)  评论:(0)  加入收藏
▌简易百科推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  快乐火车9d3    Tags:SQL   点击:(1)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  linux上的码农    Tags:sql   点击:(9)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰...【详细内容】
2021-12-22  GitHub精选    Tags:HasorDB   点击:(5)  评论:(0)  加入收藏
作者丨Rafal Grzegorczyk译者丨陈骏策划丨孙淑娟【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将...【详细内容】
2021-12-22    51CTO  Tags:Liquibase   点击:(3)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Bald    Tags:SQL   点击:(5)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  谣言止于独立思考    Tags:SQL基础   点击:(13)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  柠檬班软件测试    Tags:SQL   点击:(15)  评论:(0)  加入收藏
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表...【详细内容】
2021-12-08  小智雅汇    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
概述DBConvert Studio 是一款强大的跨数据库迁移和同步软件,可在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的 DBConvert 和 DBSync 核心与改进的现...【详细内容】
2021-11-17  雪竹聊运维    Tags:数据库   点击:(26)  评论:(0)  加入收藏
一、前言 大家好,我是小诚,《从0到1-全面深刻理解MySQL系列》已经来到第四章,这一章节的主要从一条SQL执行的开始,由浅入深的解析SQL语句由客户端到服务器的完整执行流程,最...【详细内容】
2021-11-09  woaker    Tags:SQL   点击:(35)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条