Druid 实践1-概述和架构

2017-08-22  本文已影响0人  zfylin

概述

设计原则

实时分析

Druid 提供了包含基于时间维度数据的存储服务,并且任何一行都是历史真实事件。所以设计之初约定事件一旦进入系统,就不可改变

历史数据存储以segment数据文件的方式存储在深度存储系统(S3、HDFS)中。当需要查询时,Druid在再把数据从深度存储系统中装载到内存中查询使用。

技术特点

基本概念

数据格式

如下表,时间是时间列,国家、平台、语言是维度列,激活数、充值金额是指标列

时间 国家 平台 语言 激活数 充值金额
2017-08-04T00:00:00.000Z SA ios en 111 222.00

数据摄入

数据查询

扩展性

架构

总体架构

索引服务:

索引服务的结构类似Hadoop Yarn 架构。

外部依赖

druid数据流程:


druid数据流程druid数据流程

druid管理流程:


druid管理流程druid管理流程

数据结构

DataSource

Druid的DataSource类似RDBMS中的表

DataSource结构DataSource结构

Druid基于DataSource结构存储数据时即可选择对任意的指标进行聚合(Roll Up)操作。该操作主要基于维度列与时间范围:

DataSource聚合后数据:


DataSource聚合后数据DataSource聚合后数据

Segment

DataSource是一个逻辑概念,Segment是数据的实际物理存储格式。
Druid正是通过 Segment实现了对数据的横纵向切割( Slice and Dice)操作。从数据按时间分布的角度来看,通过参数 segmentGranularity的设置, Druid将不同时间范围内的数据存储在不同的 Segment数据块中,这便是所谓的数据横向切割。这种设计为 Druid带来一个显而易见的优点:按时间范围查询数据时,仅需要访问对应时间段内的这些 Segment数据块,而不需要进行全表数据范围查询,这使效率得到了极大的提高。

Segment存储Segment存储

同时,在 Segment中也面向列进行数据压缩存储,这便是所谓的数据纵向切割。而且在 Segment中使用了 Bitmap等技术对数据的访问进行了优化

扩展系统

实时节点(Realtime Mode)

实时节点(Realtime Node) 负责即时摄入实时数据,以及生成Segment数据文件,并提供实时数据的查询。

master即为协调节点(coordinator)


实时节点Segment生成流程实时节点Segment生成流程

历史节点(Historical Mode)

历史节点负责加载已生成好的数据文件以及提供数据查询。

历史节点加载Segment数据文件历史节点加载Segment数据文件

历史节点在从下载segment前,会从本地缓存检查是否存在,如果不存在才从hdfs下载。下载完成之后,会根据zk获取到的压缩信息进行解压处理并加载到内存,提供查询服务。

数据分层

可以通过配置给历史节点划分不同的层(Tier),然后在coordinator配置规则来加载指定数据源到某个层。这样可以实现冷热数据划分处理,热数据查询多存量小,采用更好的cpu和内存机型配置,冷数据查询少存量大,采用更大的硬盘机型配置

查询节点(Broker Mode)

查询节点对外提供数据查询服务,并同时从实时节点与历史节点查询数据,合并后返回调用方。

缓存使用

Druid使用Cache机制提高查询效率。

协调节点(Coordinator Mode)

协调节点负责 历史节点的负载均衡,并通过规则管理数据的生命周期。

索引服务

索引服务包含一组组件,并以主从结构作为其架构方式。其中统治节点(Overlord Node)为主节点,中间管理者(Middle Manager)为从节点。

索引服务流程索引服务流程
上一篇下一篇

猜你喜欢

热点阅读