文章目录

  • Druid架构与原理
    • Druid系统架构详解
      • 索引服务
      • Overlord节点
      • MiddleManager节点
      • Coordinator节点
      • Historical节点
      • Broker节点
    • Druid数据存储
      • 数据存储
      • 数据分区
      • Segment
      • Segment内部存储结构
      • roll-up聚合
      • 位图索引

Druid架构与原理

Druid系统架构详解

Druid有5种节点:

  • Overlord
  • MiddleManager
  • Coordinator
  • Historical
  • Broker

以下是这几个节点的主要功能:

  • Overlord、MiddleManager

    • 负责处理索引任务
    • Overlord是MiddleManager的master节点
  • Coordinator、Historical
    • 负责管理分发Segment
    • Coordinator是Historical的master节点
  • Broker
    1. 负责接收Client查询请求
    2. 拆分子查询给MiddleManager和Historical节点
    3. 合并查询结果返回给Client

索引服务

  • 索引服务是数据摄入创建和销毁Segment的重要方式
  • Druid提供一组支持索引服务(Indexing Service)的组件,即Overlord和MiddleManager节点
  • 索引服务采用的是主从架构,Overlord为主节点,MiddleManager是从节点

索引服务架构图如下图所示:

索引服务由三部分组件组成:

  • Overlord组件

    • 分配任务给MiddleManager
  • MiddleManager组件
    • 用于管理Peon的
  • Peon(劳工)组件
    • 用于执行任务

部署:

  • MiddleManager和Overlord组件可以部署在相同节点也可以跨节点部署
  • Peon和MiddleManager是部署在同一个节点上的

索引服务架构和Yarn的架构很像:

  • Overlaod => ResourceManager,负责集群资源管理和任务分配
  • MiddleManager => NodeManager,负责接受任务和管理本节点的资源
  • Peon => Container,执行节点上具体的任务

Overlord节点

  • Overlord是索引服务的主节点,对外负责接受索引任务,对内负责将任务分解并下发给MiddleManager
  • Overlord有两种运行模式:
    • 本地模式(Local Mode):默认模式。本地模式下的Overlord不仅负责任务协调工作,还会负责启动一些peon来完成具体的任务。
    • 远程模式(Remote Mode):该模式下,Overlord和MiddleManager运行在不同的节点上,它仅负责任务的协调工作,不负责完成具体的任务。
  • Overlord提供了一个UI客户端,可以用于查看任务、运行任务和终止任务等
    • http://node1:8090/console.html
  • Overlord提供了RESETful的访问形式,所以客户端可以通过HTTP POST形式向请求节点提交任务
    • 提交任务:http://node1:8090/druid/indexer/v1/task
    • 杀死任务:http://node1:8090/druid/indexer/v1/task/{task_id}/shutdown

MiddleManager节点

  • MiddleManager是执行任务的工作节点
  • MiddleManager会将任务单独发给每个单独JVM运行的Peon
  • 每个Peon一次只能运行一个任务

Coordinator节点

  • Coordinator是Historical的mater节点,主要负责管理和分发Segment
  • 具体工作就是
    • 告知Historical加载或删除Segment
    • 管理Segment副本以及负载Segment在Historical上的均衡
  • Coordinator是定期运行的,通过Zookeeper获取当前集群状态,通过评估集群状态来进行均衡负载Segment
  • Coordinator连接数据库(MetaStore),获取Segment信息和规则(Rule),Coordinator根据数据库中表的数据来进行集群 segment 管理
  • Coordinator提供了一UI界面,用于显示集群信息和规则配置
    • http://node1:8081/index.html#/

Historical节点

  • Historical节点负责管理历史Segment
  • Historical节点通过Zookeeper监听指定的路径来发现是否有新的Segment需要加载
  • Historical节点收到有新的Segment时候,就会检测本地cache和磁盘,查看是否有该Segment信息。如果没有Historical节点会从Zookeeper中拉取该Segment相关的信息,然后进行下载

Broker节点

  • Broker节点负责转发Client查询请求的
  • Broker通过zookeeper能够知道哪个Segment在哪些节点上,将查询转发给相应节点
  • 所有节点返回数据后,Broker会将所有节点的数据进行合并,然后返回给Client

Druid数据存储

Druid提供对大数据集的实时摄入和高效复杂查询的性能,主要原因:基于Datasource与Segment的数据存储结构

数据存储

  • Druid中的数据存储在被称为DataSource中,DataSource类似RDMS中的table
  • 每个DataSource按照时间划分,每个时间范围称为一个chunk((比如按天分区,则一个chunk为一天))
  • 在chunk中数据由被分为一个或多个segment
    • segment是数据实际存储结构,Datasource、Chunk只是一个逻辑概念
  • 每个segment都是一个单独的文件,通常包含几百万行数据
  • segment是按照时间组织成的chunk,所以在按照时间查询数据时,效率非常高

数据分区

  • Druid处理的是事件数据,每条数据都会带有一个时间戳,可以使用时间进行分区
  • 上图指定了分区粒度为为天,那么每天的数据都会被单独存储和查询

Segment

  • Segment是数据存储、复制、均衡和计算的基本单元
  • Segment具备不可变性,一个Segment一旦创建完成后(MiddleManager节点发布后)就无法被修改
  • 只能通过生成一个新的Segment来代替旧版本的Segment

Segment内部存储结构

  • Druid采用列式存储,每列数据都是在独立的结构中存储
  • Segment中的数据类型主要分为三种
    • 时间戳
    • 维度列
    • 指标列

  • 时间戳列和指标列

    • Druid采用LZ4压缩每列的整数或浮点数
    • 收到查询请求后,会拉出所需的行数据(对于不需要的列不会拉出来),并且对其进行解压缩
  • 维度列
    • 维度列需要支持filter和group by
    • Druid使用了字典编码(Dictionary Encoding)和位图索引(Bitmap Index)来存储每个维度列
    • 每个维度列需要三个数据结构
      • 需要一个字典数据结构,将维度值映射成一个整数ID
      • 使用上面的字典编码,将该列所有维度值放在一个列表中
      • 对于列中不同的值,使用bitmap数据结构标识哪些行包含这些值。

Druid针对维度列之所以使用这三个数据结构,是因为:

  • 使用字典将字符串映射成整数ID,可以紧凑的表示维度数据
  • 使用Bitmap位图索引可以执行快速过滤操作
    • 找到符合条件的行号,以减少读取的数据量
    • Bitmap可以快速执行AND和OR操作

roll-up聚合

  • Druid通过一个roll-up的处理,将原始数据在注入的时候就进行汇总处理
  • roll-up可以压缩我们需要保存的数据量
  • Druid会把选定的相同维度的数据进行聚合操作,可减少存储的大小
  • Druid可以通过 queryGranularity 来控制注入数据的粒度。 最小的queryGranularity 是 millisecond(毫秒级)

Roll-up聚合前:

time app_key area value
2019-10-05 10:00:00 area_key1 Beijing 1
2019-10-05 10:30:00 area_key1 Beijing 1
2019-10-05 11:00:00 area_key1 Beijing 1
2019-10-05 11:00:00 area_key2 Shanghai 2

Roll-up聚合后:

time app_key area value
2019-10-05 area_key1 Beijing 3
2019-10-05 area_key2 Shanghai 2

位图索引

以下为一个DataSource(表)中存储的数据。

  • 第一列为时间,Appkey和area都是维度列,value为metric列
  • Druid会在导入阶段自动对数据进行Rollup,将维度相同组合的数据进行聚合处理

按天聚合后的数据如下

Druid通过建立位图索引,来实现快速进行数据查找。

索引如下所示:

  • 索引位图可以看作是HashMap<String, Bitmap>

    • key就是维度的取值
    • value就是该表中对应的行是否有该维度的值

以SQL查询为例:
1)boolean条件查询

select sum(value)
from AD_areauser
where time=’2017-10-11’ and Appkey in (‘appkey1’,’appkey2’) and area=’北京’

执行过程分析:

  1. 根据时间段定位到segment
  2. Appkey in (‘appkey1’, ‘appkey2’) and area=’北京’查到各自的bitmap
    • (appkey1(1000) or appkey2(0110)) and (北京(1100) ) = 1000 or 0110 = 1110
    • (1000 or 0110) and 1100 = 1110 and 1100 = 1100
    • 符合条件的列为第一行和第二行,这两行的 sum(value) 的和为26.

2)group by 查询

select area, sum(value)
from AD_areauser
where time=’2017-10-11’and Appkey in (‘appkey1’,’appkey2’)
group by area

该查询与上面的查询不同之处在于将符合条件的列

  • appkey1(1000) or appkey2(0110) = (1110)
  • 将第一行、第二行、第三行取出来
  • 在内存中做分组聚合。结果为:北京:26, 上海:13.

Apache Druid 总结相关推荐

  1. Apache Druid(一)简介

    翻译自 Apache Druid Apache Druid(正在孵化)是一个开源的分布式数据存储.德鲁伊的核心设计结合了OLAP /分析数据库,时间序列数据库和搜索系统的思想,为广泛的用例创建了一个统 ...

  2. Apache Druid Console 远程命令执行漏洞

    一.漏洞概述 Apache Druid 是用Java编写的面向列的开源分布式数据存储,旨在快速获取大量事件数据,并在数据之上提供低延迟查询. Apache Druid 默认情况下缺乏授权认证,攻击者可 ...

  3. apache druid 与kafka整合使用

    前言 在上一篇,我们了解了apache druid的搭建,以及如何快速导入外部数据源到apache druid中进行数据分析和使用 本篇,我们结合一个实际的简单的应用场景,来说说apache drui ...

  4. centos7 搭建apache druid

    Apache Druid简介 Apache Druid是一个实时分析型数据库,旨在对大型数据集进行快速的查询分析("OLAP"查询).Druid最常被当做数据库来用以支持实时摄取. ...

  5. Apache Druid安装部署手册

    一 Apache Druid架构 1. Coordinator 监控Historical处理,负责分配segments到指定的服务,确保存在HIstorical中是自平衡的 2. Overlord 监 ...

  6. 【Druid】(四)Apache Druid 部署和配置(单机版 / Docker 容器版 / Kubernetes 集群版)

    文章目录 一.Apache Druid 部署 1.1 单机版 1.1.1 Jar 包下载 1.1.2 Druid 的安装部署 1.2 Docker 容器版 1.2.1 下载 1.2.2 配置 Dock ...

  7. 【Druid】(八)Apache Druid 核心插件 Kafka Indexing Service SLS Indexing Service

    文章目录 一.前言 二.与 Kafka 集群交互 三.使用 Apache Druid Kafka Indexing Service 实时消费 Kafka 数据 四.关于 SLS Indexing Se ...

  8. Apache Druid远程代码执行漏洞(CVE-2021-25646)

    Apache Druid远程代码执行漏洞(CVE-2021-25646) 0x01 漏洞简介 Apache Druid 是用 Java 编写的面向列的开源分布式数据存储, 通常用于商业智能/ OLAP ...

  9. 基于 Apache Druid 的实时分析平台在爱奇艺的实践

    - 导读 - 最近几年大数据技术在各行各业得到广泛应用,为企业的运营决策和各种业务提供支持.随着数据的增长,业务对数据时效性的要求,给企业的大数据分析带来了巨大挑战.针对海量数据的实时分析需求,近年来 ...

  10. Apache Druid LoadData 任意文件读取漏洞

    Apache Druid复现 描述 由于用户指定 HTTP InputSource 没有做出限制,可以通过将文件 URL 传递给 HTTP InputSource 来绕过应用程序级别的限制.攻击者可利 ...

最新文章

  1. Binary Search O(log n) algorithm to find duplicate in sequential list?
  2. 神经网络与机器学习 笔记—小规模和大规模学习问题
  3. 现身说法,给职场新人的投资理财建议
  4. 起步15万年薪 这些名校高材生争当卷烟工
  5. mysql中文时间转换,MySQL 当中 日期 字符串 时间戳互转
  6. java yyyy-mm-dd 日期格式_Java中的日历日期为yyyy-MM-dd格式
  7. 随机数相加等于固定值_excel随机函数出来的数相加等于一个想要的固定值
  8. 伦敦大学学院计算机残疾,伦敦大学学院残疾、设计和创新理学硕士
  9. AC日记——[HNOI2012]永无乡 bzoj 2733
  10. PowerShell 使用当前日期创建文件夹
  11. android t9键盘,T9/全键盘/侧滑 论手机键盘设计优缺点
  12. 需求分析师面试题案例_如何准备作为分析师的业务案例面试
  13. 黑客丛林之旅通关攻略(共14关)
  14. 量化投资学习——经济周期
  15. python输出图形效果的代码_python打印图形大全(详解)
  16. 水利水电安全员考试多选练习题库(8)
  17. 电气火灾监控系统在杭州湾新区产业园区一期的设计与应用——安科瑞 陆琳钰
  18. 1.有四个数字:1,2,3,4能组成多少个互不相同且无重复数字的三位数?各是多少?
  19. 燕教授助力公益,已种下60000棵树,修复荒漠78万平方米
  20. TP-LINK宽带路由器限速设置和P2P设置方法

热门文章

  1. 三万字总结╰(*°▽°*)╯ 计算机网络 知识点汇总
  2. 今日头条(App和MainActivity类)
  3. 数据结构:通过hash表建立一个宝可梦图鉴管理系统
  4. COMSOL弱形式解微分方程
  5. 智力开发(赛马问题)
  6. Ubuntu18.04 LTS 安装 Synopsys VCS及一些问题
  7. Java网课基础笔记(4)19-07-16
  8. 我,28岁程序员,没想到今年找工作这么难
  9. outlook怎么删除服务器备份文件,如何彻底删除outlook的一切数据,包括账户信息和邮件...
  10. c/c++/linux精确定时器