Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Druid介绍及入门[通俗易懂]

Druid介绍及入门[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-15 06:52:56
发布于 2022-09-15 06:52:56
3K0
举报

大家好,又见面了,我是你们的朋友全栈君。

1.什么是Druid?

Druid是一个高效的数据查询系统,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。 Druid采用的架构: shared-nothing架构与lambda架构 Druid设计三个原则: 1.快速查询(Fast Query) : 部分数据聚合(Partial Aggregate) + 内存华(In-Memory) + 索引(Index) 2.水平拓展能力(Horizontal Scalability):分布式数据(Distributed data)+并行化查询(Parallelizable Query) 3.实时分析(Realtime Analytics):Immutable Past , Append-Only Future

2.Druid的技术特点

数据吞吐量大 支持流式数据摄入和实时 查询灵活且快速

3.Druid基本概念:

Druid在数据摄入之前,首先要定义一个数据源(DataSource,类似于数据库中表的概念) Druid是一个分布式数据分析平台,也是一个时序数据库 1.数据格式 数据集合(时间列,维度列,指标列) 数据结构 基于DataSource与Segment的数据结构,DataSource相当于关系型数据库中的表。 DataSource包含: 时间列(TimeStamp):标识每行数据的时间值 维度列(Dimension):标识数据行的各个类别信息 指标列(Metric):用于聚合和计算的列 Segment结构: DataSource是逻辑结构,而Segment是数据实际存储的物理结构,Druid通过Segment实现对数据的横纵切割操作。 横向切割:通过设置在segmentGranularity参数,Druid将不同时间范围内的数据存储在不同Segment数据块中。 纵向切割:在Segment中面向列进行数据压缩处理

设置合理的Granularity segmentGranularity:segment的组成粒度。 queryGranularity :segment的聚合粒度。 queryGranularity 小于等于 segmentGranularity 若segmentGranularity = day,那么Druid会按照天把不同天的数据存储在不同的Segment中。 若queryGranularity =none,可以查询所有粒度,queryGranularity = hour只能查询>=hour粒度的数据

2.数据摄入 实时数据摄入 批处理数据摄入

3.数据查询 原生查询,采用JSON格式,通过http传送

4.时序数据库

1.OpenTSDB 开源的时序数据库,支持数千亿的数据点,并提供精确的数据查询功能 采用java编写,通过基于Hbase的存储实现横向拓展 设计思路:利用Hbase的key存储一些tag信息,将同一小时的数据放在一行存储,提高了查询速度 架构示意图:

2.Pinot 接近Druid的系统 Pinot也采用了Lambda架构,将实时流和批处理数据分开处理 Realtime Node处理实时数据查询 Historical Node处理历史数据 技术特点: 面向列式存储的数据库,支持多种压缩技术 可插入的索引技术 — Sorted index ,Bitmap index, Inverted index 可以根据Query和Segment元数据进行查询和执行计划的优化 从kafka实时灌入数据和从hadoop的批量数据灌入 类似于SQL的查询语言和各种常用聚合 支持多值字段 水平拓展和容错 Pinot架构图:

3.Druid架构概览

Druid包含以下四个节点: 实时节点(Realtime ):即时摄入实时数据,以及生成Segment数据文件 实时节点负责消费实时数据,实时数据首先会被直接加载进实时节点内存中的堆结构缓存区,当条件满足时, 缓存区的数据会被冲写到硬盘上形成一个数据块(Segment Split),同时实时节点又会立即将新生成的数据库加载到内存的非堆区, 因此无论是堆结构缓存区还是非堆区里的数据都能被查询节点(Broker Node)查询 历史节点(Historical Node):加载已经生成好的文件,以供数据查询 查询节点(Broker Node):对外提供数据查询服务,并同时从实时节点和历史节点查询数据,合并后返回给调用方 协调节点(Coordinator Node):负责历史节点的数据负载均衡,以及通过规则(Rule)管理数据的生命周期

集群还依赖三类外部依赖 元数据库(Metastore):存储Druid集群的原数据信息,比如Segment的相关信息,一般用MySql或PostgreSQL 分布式协调服务(Coordination):为Druid集群提供一致性协调服务的组件,通常为Zookeeper 数据文件存储系统(DeepStorage):存放生成的Segment文件,并供历史节点下载。对于单节点集群可以是本地磁盘,而对于分布式集群一般是HDFS或NFS

实时节点数据块的生成示意图:

数据块的流向:

Realtime Node 实时节点: 1.通过Firehose来消费实时数据,Firehose是Druid中消费实时数据的模型 2.实时节点会通过一个用于生成Segment数据文件的模块Plumber(具体实现有RealtimePlumber等)按照指定的周期,按时将本周起生产的所有数据块合并成一个大的Segment文件

Historical Node历史节点

历史节点在启动的时候 : 1、会去检查自己本地缓存中已经存在的Segment数据文件 2、从DeepStorege中下载属于自己但是目前不在自己本地磁盘上的Segment数据文件 无论何种查询,历史节点会首先将相关Segment数据文件从磁盘加载到内存,然后在提供查询

Broker Node节点: Druid提供两类介质作为Cache以供选择 外部Cache,比如Memcached 本地Cache,比如查询节点或历史节点的内存作为cache

高可用性: 通过Nginx来负载均衡查询节点(Broker Node)

协调节点: 协调节点(Coordinator Node)负责历史节点的数据负载均衡,以及通过规则管理数据的生命周期

4.索引服务

1.其中主节点:overlord 两种运行模式: 本地模式(Local Mode):默认模式,主节点负责集群的任务协调分配工作,也能够负责启动一些苦工(Peon)来完成一部分具体任务 远程模式(Remote):该模式下,主节点与从节点运行在不同的节点上,它仅负责集群的任务协调分配工作,不负责完成具体的任务,主节点提供RESTful的访问方法,因此客户端可以通过HTTP POST 请求向主节点提交任务。 命令格式如下: http://<ioverlord_ip>:port/druid/indexer/v1/task 删除任务:http://<ioverlord_ip>:port/druid/indexer/v1/task/{taskId}/shutdown 控制台:http://<ioverlord_ip>:port/console.html

2.从节点:Middle Manager 索引服务的工作节点,负责接收主节点的分配的任务,然后启动相关的苦工即独立的JVM来完成具体的任务 这样的架构与Hadoop YARN相似 主节点相当于Yarn的ResourceManager,负责集群资源管理,与任务分配 从节点相当于Yarn的NodeManager,负责管理独立节点的资源并接受任务 Peon(苦工)相当于Yarn的Container,启动在具体节点上负责具体任务的执行

问题:

由于老版本的Druid使用pull方式消费kafka数据,使用kafka consumer group来共同消费一个kafka topic的数据,各个节点会负责独立消费一个或多个该topic所包含的Partition数据,并保证同一个Partition不会被多于一个的实时节点消费。每当一个实时节点完成部分数据的消费后,会主动将消费进度(kafka topic offset)提交到Zookeeper集群。 当节点不可用时,该kafka consumer group 会立即在组内对所有可用的节点进行partition重新分配,接着所有节点将会根据记录在zk集群中每一个partition的offset来继续消费未曾消费的数据,从而保证所有数据在任何时候都会被Druid集群至少消费一次。 这样虽然能保证不可用节点未消费的partition会被其余工作的节点消费掉,但是不可用节点上已经消费的数据,尚未被传送到DeepStoreage上且未被历史节点下载的Segment数据却会被集群遗漏,这是基于kafka-eight Firehose消费方式的一种缺陷。 解决方案: 1.让不可用节点恢复重新回到集群成为可用节点,重启后会将之前已经生成但未上传的Segment数据文件统统加载回来,并最终合并传送到DeepStoreage,保证数据完整性 2.使用Tranquility与Indexing Service,对kafka的数据进行精确的消费与备份。 由于Tranquility可以通过push的方式将指定数据推向Druid集群,因此它可以同时对同一个partition制造多个副本。所以当某个数据消费失败时候,系统依然可以准确的选择使用另外一个相同的任务所创建的Segment数据库

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163547.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Druid实时大数据分析原理
Druid是一个分布式支持实时分析的数据存储系统,为分析而生,在处理数据的规模和数据处理实时性方面比传统OLAP系统有显著的性能改进。与阿里的druid无关。
大数据真好玩
2020/06/03
4.1K0
Druid实时大数据分析原理
Druid架构设计思想详解
对于目前大多数Druid 的使用场景来说,Druid 本质上是一个分布式的时序数据库,而对于一个数据库的性能来说,其数据的组织方式至关重要。为了更好地阐述Druid 的架构设计思想,我们得先从数据库的文件组织方式聊起。
博文视点Broadview
2020/06/11
9000
大数据Apache Druid(二):Druid数据结构及架构原理
Druid中的数据存储在datasource中,类似RDBMS中的table,每个datasource中按照时间划分,每个时间范围称为一个chunk(一般一天为一个chunk),在一个chunk中数据根据维度的Hash或者范围被分成一个或者多个segment,每个segment都是一个单独的文件,通常包含几百万行数据,这些segment是按照时间组织成的,所以在按照时间查询数据时,效率非常高。实际上,datasource和chunk都是抽象的,Druid底层存储就是Segment,一旦一个Segment生成后就无法被修改,只能通过生成一个新的Segment来代替旧版本的Segment。
Lansonli
2022/08/18
1.2K0
大数据Apache Druid(二):Druid数据结构及架构原理
理“ Druid 元数据”之乱
Druid 是一个专为大型数据集上的高性能切片和 OLAP 分析而设计的数据存储系统。
2020labs小助手
2022/05/30
7120
Druid架构面面观
场景描述:大数据时代,对于数据的各种操作要求往往是分离开的,比如有专门的系统负责插入,有专门的系统负责查询。druid的就很好的体现了这一点。
大数据真好玩
2019/09/26
7710
Druid架构面面观
OLAP红与黑 | 也许你应该考虑一下Druid
场景描述:Druid是一个专为大型数据集上的高性能切片和OLAP分析而设计的数据存储。Druid最常用作为GUI分析应用程序提供动力的数据存储,或者用作需要快速聚合的高度并发API的后端。
王知无-import_bigdata
2019/09/08
1.4K0
Druid实时OLAP数据分析存储系统极简入门
Druid 是一个开源的,分布式的,列存储的,适用于实时数据分析的存储系统,能够快速聚合、灵活过滤、毫秒级查询、和低延迟数据导入。
王知无-import_bigdata
2019/08/20
1.8K0
Druid实时OLAP数据分析存储系统极简入门
OLAP引擎:基于Druid组件进行数据统计分析
Druid是一款基于分布式架构的OLAP引擎,支持数据写入、低延时、高性能的数据分析,具有优秀的数据聚合能力与实时查询能力。在大数据分析、实时计算、监控等领域都有相关的应用场景,是大数据基础架构建设中重要组件。
知了一笑
2021/04/16
7580
OLAP引擎:基于Druid组件进行数据统计分析
快速学习-Druid的架构
第2章 Druid的架构 Druid总体包含以下5类节点: 中间管理节点(middleManager node):及时摄入实时数据,已生成Segment数据文件。 历史节点(historical
cwl_java
2020/03/25
4700
实时统计分析系统-Apache Druid
Druid.io(以下简称Druid)是2013年底开源出来的, 主要解决的是对实时数据以及较近时间的历史数据的多维查询提供高并发(多用户),低延时,高可靠性的问题。
王知无-import_bigdata
2020/06/04
2.2K0
实时统计分析系统-Apache Druid
Druid 在有赞的实践
Druid 是 MetaMarket 公司研发,专为海量数据集上的做高性能 OLAP (OnLine Analysis Processing)而设计的数据存储和分析系统,目前 Druid 已经在 Apache 基金会下孵化。Druid 的主要特性:
Fayson
2019/03/07
1.9K0
大数据繁荣生态圈组件之实时大数据Druid小传(二)Druid架构与原理
索引服务是数据摄入创建和销毁Segment的重要方式,Druid提供一组支持索引服务(Indexing Service)的组件,即Overlord和MiddleManager节点。
Maynor
2022/04/21
6410
大数据繁荣生态圈组件之实时大数据Druid小传(二)Druid架构与原理
面经:Druid实时数据分析系统设计与应用
作为一名专注于大数据处理与实时分析技术的博主,我深知Apache Druid作为一款高性能的实时数据分析系统,在现代数据栈中所发挥的关键作用。本篇博客将结合我个人的面试经历,深入剖析Druid的设计理念、核心功能及其在实际应用中的最佳实践,分享面试必备知识点,并通过示例进一步加深理解,助您在求职过程中自信应对与Druid相关的技术考察。
Jimaks
2024/04/14
2010
0836-Apache Druid on HDP
Apache Druid是一个分布式的、面向列的、实时分析数据库,旨在快速获取大量数据并将其编入索引,并对大型数据集进行快速的切片和切分分析(“OLAP查询),常用于实时摄取、快速查询和对时间依赖性很高的数据库用户。因此,Druid可以为可视化的分析应用程序提供强力的数据源支持,或用作需要快速聚合的高并发API的后端。Druid最适合面向事件的数据。
Fayson
2021/04/30
1.3K0
0836-Apache Druid on HDP
Apache Druid 的集群设计与工作流程
Druid 是多进程架构,每种进程类型都可以独立配置,独立扩展。这样可以为集群提供最大的灵活度。这种设计还提供了强失效容忍:一个失效的组件不会立即影响另外的组件。
码哥字节
2020/03/24
1.1K0
大数据繁荣生态圈组件之实时大数据Druid小传(三)Druid入门实操
3.访问WebUI 组件名 URL broker http://node01:8888 coordinator、overlord http://node01:8081/index.html middleManager、historical http://node01:8090/console.html
Maynor
2022/04/21
8630
大数据繁荣生态圈组件之实时大数据Druid小传(三)Druid入门实操
​爱奇艺|海量数据实时分析服务技术架构演进
爱奇艺目前使用到的大数据相关技术有Druid、Impala、Kudu、Kylin、Presto、ElasticSearch等,并且随着各技术框架的版本升级而升级。比如:
Spark学习技巧
2019/09/23
1.4K0
​爱奇艺|海量数据实时分析服务技术架构演进
Apache Druid历险记
Druid是一个快速的列式分布式的支持实时分析的数据存储系统。它在处理PB级数据、毫秒级查询、数据实时处理方面,比传统的OLAP系统有了显著的性能改进。
sowhat1412
2022/09/20
1.2K0
Apache Druid历险记
一文深入掌握druid
Druid是专用于基于大数据集的实时探索分析的开源数据存储。该系统包括列式存储,分布式的无共享架构,高级索引结构,可用于任意探索具有次秒级延迟的十亿行级的数据表。这篇文章我们主要描述Druid的架构,并且详细说明它如何支持快速聚合、灵活筛选以及低延迟数据的加载。
Spark学习技巧
2021/01/07
1.6K0
快速学习-Druid数据摄入
一些简单的聚合函数: count 、longSum、longMin、longMax、doubleSum、doubleMin、doubleMax
cwl_java
2022/11/30
7820
快速学习-Druid数据摄入
相关推荐
Druid实时大数据分析原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档