Druid.io系列(二):基本概念与架构

Druid学习笔记(2)Druid架构剖析 1. 前言Druid 的目标是提供一个能够在大数据集上做实时数据摄入与查询的平台,然而对于大多数系统而言,提供数据的快速摄入与提供快速查询是难以同时实现的两个指标。例如对于普通的RDBMS,如果想要获取更快的查询速度,就会因为创建索引而牺牲掉写入的速度,如果想要更快的写入速度,则索引的创建就会受到限制。而Druid却可以完美的对两者进行结合,本文将对Druid如何实现这种结合做一个简单的介绍。2. 阅读详情

在介绍Druid架构之前,我们先结合有关OLAP的基本原理来理解Druid中的一些基本概念。

1 数据

Druid数据
以图3.1为例,结合我们在第一章中介绍的OLAP基本概念,按列的类型上述数据可以分成以下三类:

  1. 时间序列(Timestamp),Druid既是内存数据库,又是时间序列数据库,Druid中所有查询以及索引过程都和时间维度息息相关。Druid底层使用绝对毫秒数保存时间戳,默认使用ISO-8601格式展示时间(形如:yyyy-MM-ddThh:mm:sss.SSSZ,其中“Z”代表零时区,中国所在的东八区可表示为+08:00)。

  2. 维度列(Dimensions),Druid的维度概念和OLAP中一致,一条记录中的字符类型(String)数据可看作是维度列,维度列被用于过滤筛选(filter)、分组(group)数据。如图3.1中page、Username、Gender、City这四列。

  3. 度量列(Metrics),Druid的度量概念也与OLAP中一致,一条记录中的数值(Numeric)类型数据可看作是度量列,度量列被用于聚合(aggregation)和计算(computation)操作。如图3.1中的Characters Added、Characters Removed这两列。

2 上卷

生产环境中,每天会有成百上千亿的原始数据(raw data)进入到Druid中,Druid最小粒度支持毫秒级别的事件,但是在一般使用场景中,我们很少会关注如此细粒度的数据集,同时,对数据按一定规律进行聚合不仅可以节约存储空间,亦可获得更有价值的视图。所以与其他OLAP类产品一样,Druid也支持上卷(roll-up)操作。最常用的上卷操作是对时间维度进行聚合,比如对图3.2中的数据按照小时粒度进行聚合可以得到图3.3,图3.3相对于图3.2来说,显得更加直观,也更有助于分析人员掌握全局态势。不过,上卷操作也会带来信息量的丢失,因为上卷的粒度会变成最小数据可视化粒度,即毫秒级别的原始数据,如果按照分钟粒度进行roll-up,那么入库之后我们能够查看数据的最小粒度即为分钟级别。
上卷

3 分片

Druid是时间序列数据库,也存在分片(Sharding)的概念。Druid对原始数据按照时间维度进行分片,每一个分片称为段(Segment)。
Segment是Druid中最基本的数据存储单元,采用列式(columnar)存储某一个时间间隔(interval)内某一个数据源(dataSource)的部分数据所对应的所有维度值、度量值、时间维度以及索引。

Segment数据结构

时间维度(绝对毫秒数)和度量值在底层使用整数(Integer)或者浮点数(floating point)数组进行压缩存储,默认采用LZ4压缩算法(可选LZF、uncompressed)。

维度列使用字典编码、位图索引以及相应压缩算法,包含如下三种数据结构,以图3.1中数据举例:
segment

为什么使用这三种数据结构,它们有哪些优势:

  1. 使用字典编码可以减少字符串数据的存储空间,同时表达更加简便、紧凑;

  2. 位图索引,结构类似于倒排索引,可以快速地进行按位逻辑操作;

  3. 位图索引尺寸=列基数 *数据行数,对于高基数列,我们在第二章中也详细介绍了很多位图索引压缩算法,Druid中实现了Concisebitmap compression以及Roaring bitmap compression,默认使用Concise。

Segment存储结构
Segment逻辑名称形如“datasource_intervalStart_intervalEnd_version_partitionNum”,:

dataSource:数据源;

intervalStart、intervalEnd:时间间隔的起止,使用ISO-8601格式;

version:版本号,默认v1,用于区分多次加载同一数据对应的Segment;

partitionNumber:分区编号,在每个时间间隔内,根据数据量的大小一个Segment内部可能会有多个分区,官方推荐通过控制时间间隔粒度或者partition的个数来保证每个partition的大小在300Mb-700Mb之间,从而获得最优的加载与查询性能。

这里写图片描述

这里写图片描述
这里写图片描述

4 集群节点

Druid集群包含多种节点类型,分别是Historical Node、Coordinator Node、Broker Node、Indexing Service Node(包括Overlord、MiddleManager和Peon)以及Realtime Node(包括Firehose和Plumber)。

Druid将整个集群切分成上述角色,有两个目的:第一,划分Historical Node和Realtime Node,是将历史数据的加载与实时流数据处理切割开来,因为二者都需要占用大量内存与CPU;第二,划分Coordinator Node和Broker Node,将查询需求与数据如何在集群内分布的需求切割开来,确保用户的查询请求不会影响数据在集群内的分布情况,从而不会造成数据“冷热不均”,局部过热,影响查询性能的问题。

图3.5给出了Druid集群内部的实时/批量数据流以及查询请求过程。我们可以看到,实时数据到达Realtime Node,经过Indexing Service,在时间窗口内的数据会停留在Realtime Node内存中,而时间窗口外的数据会组织成Segment存储到Deep Storage中;批量数据经过Indexing Service也会被组织成Segment存储到Deep Storage中,同时Segment的元信息都会被注册到元信息库中,Coordinator Nodes会定期(默认为1分钟)去同步元信息库,感知新生成的Segment,并通知在线的Historical Node去加载Segment,Zookeeper也会更新整个集群内部数据分布拓扑图。
这里写图片描述

当用户需要查询信息时,会将请求提交给Broker Node,Broker Node会请求Zookeeper获取集群内数据分布拓扑图,从而知晓请求应该发给哪些Historical Node以及Realtime Node,汇总各节点的返回数据并将最终结果返回给用户。
在(三)中,我们将逐一介绍各类节点。

druid基础架构 druid组件角色,介绍了druid各个组件的图片。学习druid可以看一下 立即下载

相关推荐

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装

Clamshell 拆卸与安装。

weixin_46735260的博客 1688

Apache Druid-时序数据库

Apache Druid:是是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台,旨在对大型数据集进行快速的查询分析("OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景,同时,Druid也通常被用来助力分析型应用的图形化界面,或者当做需要快速聚合的高并发后端API,Druid最适合应用于面向事件类型的数据。 特性 实时数据摄取:Druid能够实时地处理和索引数据,使其几乎可以立即查询。 高性能查询:Druid优化了查询性能,特别是对于

学渣的博客 1546

【HarmonyOS 5】鸿蒙APP使用【团结引擎Unity】开发的案例教程

以下是基于团结引擎开发鸿蒙Unity应用的详细案例教程,整合环境配置、工程适配、跨语言通信等核心环节。

2201_75709314的博客 2482

druid mysql 时序_干货丨时序数据库DolphinDB与Druid的对比测试

DolphinDB和Druid都是分布式的分析型时序数据库。尽管前者使用c++开发,后者使用java开发,两者在架构、功能、应用场景等方面有很多共同点。本报告在SQL查询、数据导入、磁盘占用空间等方面对两者进行性能的对比测试。测试数据集使用约300GB的美国股票市场交易与报价数据。通过测试我们发现:DolphinDB的数据写入速度大约是Druid的30倍。DolphinDB的查询速度是Druid的...

weixin_42467634的博客 324

PayPal支付集成完全指南:开源库实践

本文介绍了如何从零开始集成PayPal支付功能。首先概述了PayPal提供的多语言SDK和开源库,包括PHP、Python、Node.js等版本。然后详细说明了准备工作,包括注册开发者账号、获取API凭证和使用沙盒环境测试。文章以Node.js为例,演示了安装SDK、基础配置和实现支付流程的完整代码,包括创建订单和捕获支付两个核心功能。最后提及了订阅支付等高级功能,为开发者提供了完整的支付集成方案。通过清晰的代码示例和步骤说明,帮助开发者快速实现PayPal支付功能集成。

2501_93501927的博客 1258

Wireshark抓包分析:如何从HTTP流量中快速定位黑客攻击痕迹(附pcap文件)

本文通过Wireshark实战,详细解析了如何从HTTP流量中快速定位黑客攻击痕迹。文章提供了核心过滤策略,并重点剖析了如何识别SQL注入攻击的流量特征、揭露WebShell的隐蔽通信以及追踪攻击者在横向移动中的行为,帮助安全人员系统性地从pcap文件中还原完整攻击链。

sprite的博客 1009

alibaba/druid 常见问题

1,363 Fork895 renfufei edited this page on 16 Sep 2014 · 51 revisions  Pages 54 Benchmark_aliyunContributorsDBCP迁移Druid Change Logdruid m

codepython的专栏 3万+

10.Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲

本文的结构还是首先教大家明确概念问题,然后深入理解概念并学会使用,最后在理论基础掌握的基础上,通过实例来强化大家的理解。本文依旧是**先理论后实践**的教学方式,欢迎留言或私聊提问。

关注我,更多技术问题欢迎私聊~ 1万+

实时数仓-Druid简介

Druid是什么 ? Apache Druid是一个实时分析数据库,为时间驱动的数据分析而生,广泛应用于OLAP。此Druid,非阿里的那个数据连接池druid。 Druid核心架构整合了数据仓库、时序数据库、日志搜索系统的思想。主要有以下特点: 列式存储 可扩展分布式系统 并行处理 实时或离线摄入数据 自容错、自平衡、容易操作 云化、容错架构不丢失数据 基于时间的分区 快速过滤的索引 应用很多...

一只破碗 1258

GameFramework 框架详解之 Network网络模块 工具链

GameFramework(下面简称GF)Demo中,已经给我们提供了Network模块使用的protobuf使用的动态链接库protobuf-net.dll,但是GF并没有给我们提供protobuf相关的工具链,比如:1.proto文件自动导出对应c#的Packet类和PacketHandler类2.导出Packet类继承IReference以便使用引用池。3.自动生成Packet类和PacketHandler的Id,且保持和服务器Id一一对应。

TxNet 2902

整理 钢琴 约翰·汤普森现代钢琴(大汤)

大汤

TS的博客 3996

Druid--图解架构与原理

Druid架构与原理Druid系统架构详解Druid有5种节点:索引服务Overlord节点MiddleManager节点Coordinator节点Historical节点Broker节点Druid数据存储数据存储数据分区SegmentSegment内部存储结构时间戳列和指标列维度列roll-up聚合位图索引以SQL查询为例: Druid系统架构详解 Druid有5种节点: Overlord MiddleManager Coordinator Historical Broker 以下是这几个节点的主要功能

qq_46893497的博客 1778

二、NovAtel Connect 2.3.2 版本 操作说明

一、连接方式 有 串口连接、USB连接、蓝牙连接、无线网连接、网口连接,具体的连接方式看博客: https://blog.csdn.net/hltt3838/article/details/110622732 下面具体的介绍一下 串口的连接方式: 接收机有三个串口,COM1、COM2、COM3,看上面的连接就知道了! 并且有三个对应的线,1 2 3 ; 把线和串口对应连接,串口的另一端和电脑连接,当然如果电脑没有串口,可以用 串口转USB,如线图所示: (当然,一定要连接电源呀) ...

努力努力努力 4383

Druid基本概念及架构介绍

Druid基本概念及架构介绍 作者:it_zzy 链接:https://www.jianshu.com/p/6f822e0f538c 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1.什么是Druid Druid是一个专为大型数据集上的高性能切片和OLAP分析而设计的数据存储。Druid最常用作为GUI分析应用程序提供动力的数据存储,或者用作需要快速聚合的高度并发API的后端。Druid的常见应用领域包括: 点击流分析 网络流量分析 .

CarloPan的博客 3697

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Druid.IO简介系列之二:Druid系统架构

Druid采用多进程,分布式的架构;其架构易于运维及部署,便于部署在云环境中。每个Druid进程都可以被独立地配置和横向扩展,这种设计一方面赋予了Druid集群最大的灵活性和可扩展性,另一方面以提供了更高的容错性:避免了个别组件的失效影响了系统的其他模块。 Druid进程类型包括: Historical进程:Historical进程用于处理历史数据的存储和查询(历史数据包括所以已经被commi...

greensea669的博客 682

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Druid.io系列

研究下了Druid,找个一个系列的博文,写的很好,非常适合快速入门。 Druid.io系列(一):简介 Druid.io系列(二):基本概念与架构 Druid.io系列(三): Druid集群节点 Druid.io系列(四):索引过程分析 Druid.io系列(五):查询过程 Druid.io系列(六):问题总结

来啊 快活啊 726

Druid系列 《二》Druid使用与安装

  2.1加载数据到Druid Druid支持流式(实时)和基于文件(批量)的数据提取方式。最常用的配置是: Files - 通过HDFS、S3、本地文件或者任何支持hadoop文件系统批量加载数据。如果你的数据集已经在这类文件系统中推荐使用这个方法。 Stream push - 使用Tranquility(向Druid发送流的客户端)将实时数据流推送到Druid。如果你的数据集来自于流式...

sinat_32176267的博客 2910

Druid.io系列连载文章

Druid.io系列(一):简介Druid.io系列(二):基本概念与架构Druid.io系列(三): Druid集群节点Druid.io系列(四):索引过程分析Druid.io系列(五):查询过程Druid.io系列(六):问题总结...

大树叶 技术专栏 578

Druid.io——架构

Druid采用多进程,分布式的架构;其架构易于运维及部署,便于部署在云环境中。每个Druid进程都可以被独立地配置和横向扩展,这种设计一方面赋予了Druid集群最大的灵活性和可扩展性,另一方面以提供了更高的容错性:一个组件的中断不会立即影响其他组件。 架构概述 1、架构图 2、...

choumo7895的博客 337

Druid(Druid.io)架构分析

1基本概念 2架构组成 3高性能原理 1.预聚合。 2. Druid中通过Segment实现了对数据的横众向切割操作。 3Druid中Segment采用类LSM-Tree(日志结构合并树)写入模型保证写入性能,同时数据分级存储保证查询性能以及存储成本 4.Segment中使用了Bitmap索引技术,大大加快了数据聚合查询性能。 5.数据的高度压缩(索引压缩,数据文件压缩)

凌晨1点21分的专栏 581

Druid.io系列(一):简介

Druid.io(以下简称Druid)是面向海量数据的、用于实时查询与分析的OLAP存储系统。

njpjsoftdev的博客 8617

druid.io官方架构&实际工作中的数据流

druid官方文档 架构图 需要回答的问题 数据怎么进入系统 实时数据,离线数据直接创建任务发送到Overlord (外部系统传输数据到Druid) 数据怎么存储 离线(非实时部分)数据:存储到深度存储,数据元信息写入元数据库,由coordinator将数据加载到historical 实时数据:存在middle的堆内/堆外内存中 数据怎么查询,为什么能实时查询 有broker节点转发查询到 hi...

master-dragon的专栏 647

druid.io mysql_Druid:Druid.io 部署&使用文档

参考:1.集群模式下部署Prerequisites : Java 7 or higher & Zookeeper & mysql下载Druid.io :curl -O http://static.druid.io/artifacts/releases/druid-0.9.1.1-bin.tar.gztar -xzf druid-0.9.1.1-bin.tar.gzcd druid-...

weixin_40007515的博客 172

Druid.io——基本概念

1、数据 Druid在数据摄入之前,首先需要定义一个datasource,类似于数据库中表的概念。每个DataSource包括三个部分: 时间序列(Timestamp),Druid既是内存数据库,又是时间序列数据库,每个数据集合都必须有时间列。Druid中所有查询以及索引过程都和时...

choumo7895的博客 441

druid.io出现的问题及解决方法

近期由于公司需要,研究了druid.io,下面是我遇到的一些问题以及解决办法,当做记录。 使用的druid.io版本为0.12.3 1、使用druid-hdfs-storage扩展将hdfs用于深度存储。使用Map / Reduce作业从hadoop批量加载数据。 公司已有的集群是CDH-5.10.1版本,该版本的cdh使用hadoop2.6.0,druid.io的0.12.3版本中自带的h...

youyoufusheng的博客 1435
上一篇: Druid.io系列(一):简介
下一篇: Druid.io系列(三): Druid集群节点
njpjsoftdev
博客等级 码龄10年 206粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值