当前位置: 首页 > news >正文

【大数据专栏】大数据框架-Apache Druid Overview

目录

Architecture


Advantages and disadvantages

从架构以及设计可以得出结论,Durid不支持ACID事务,基于时间戳列和维度列去查询,所以适合基于时间做分组和学列的查询操作。

Advantages优势:

  1. 实时数据摄取与查询
    支持秒级数据摄取和近实时查询,适合对数据时效性要求高的场景。

  2. 高性能查询
    采用列式存储、索引机制(如 bitmap、时间索引等)和多级缓存,查询速度非常快,尤其适合聚合类查询。

  3. 水平扩展性强
    架构支持分布式部署,节点可按需扩展,适合处理 PB 级数据。

  4. 灵活的数据分片与分区策略
    支持按时间、维度等进行分片,有助于提高查询效率。

  5. 内置 Rollup 和预聚合机制
    可以在摄取阶段进行数据压缩和预聚合,减少存储和加快查询。

  6. 支持多种数据源
    如 Kafka、HDFS、S3、MySQL、PostgreSQL 等,方便集成。

InAdvantages劣势:

  1. 不适合复杂事务处理
    Druid 是为分析而设计,不支持 ACID 事务,不适合 OLTP(在线事务处理)场景。

  2. 数据更新困难不支持实时更新:虽然支持流式插入,但不支持实时更新或删除,适合追加型数据而非频繁变更的数据。

  3. 扩展和运维复杂
    架构组件较多(如 MiddleManager、Historical、Broker 等),部署和运维复杂,需要手动调优,且依赖本地 SSD,存储成本较高。

  4. 存储成本可能较高
    尽管支持压缩,但在高并发和高可用配置下,资源消耗仍然较大。

  5. 对 JOIN 支持有限
    Druid 原生不支持复杂的 JOIN 操作,适合以 denormalized(扁平化)数据为主。

  6. 查询引擎性能瓶颈 基于 Java,缺乏 SIMD 优化,相比 ClickHouse、StarRocks 等新一代 OLAP 引擎性能略逊。

scenario

适合的场景

  • 实时用户行为分析:如点击流、A/B 测试、用户活跃度分析。
  • 数字广告分析:广告曝光、点击率、转化率等实时指标。
  • 网络流量监控:网络流日志分析,检测异常流量。
  • 应用性能监控:API 延迟、系统指标实时监控。
  • IoT 数据分析:设备指标、传感器数据的实时聚合和可视化。
  • 交互式 BI 应用:需要高并发、低延迟的用户自助分析场景。
     

不适合的场景

  • 需要复杂事务或 ACID 保证的场景:如金融核心系统。
  • 频繁更新或删除数据的场景:Druid 更适合追加型数据。
  • 需要复杂多表 JOIN 的分析:如高度关系型的数据模型。
  • 低实时性要求的批处理分析:如传统离线数仓任务,Hive/Spark 更合适。
  • 对成本敏感且数据量极大:Druid 对 SSD 和集群资源要求高,运维成本较高。

Architecture

Druid 具有分布式架构,旨在云友好且易于作。您可以独立配置和扩展服务,以获得集群作的最大灵活性。此设计包括增强的容错能力:一个组件的中断不会立即影响其他组件。

下图显示了构成 Druid 架构的服务、它们在服务器之间的典型排列,以及查询和数据如何流经此架构。

Durid Service

Druid has several types of services:

  • Coordinator 管理数据在集群中的可用性以及部分均匀.
  • Overlord 控制分配数据ingestion的workloads.
  • Broker 处理来自外部客户端的查询.
  • Router 路由请求致 Brokers, Coordinators, and Overlords.
  • Historical 存储可查询的数据.
  • Middle Manager and Peon ingest data.
  • Indexer 作为 Middle Manager + Peon task 执行系统的可选项.

    可以在service中看到这些服务。

Durid Server

Master Server 

A Master server manages data ingestion and availability. It is responsible for starting new ingestion jobs and coordinating availability of data on the Data server.Master servers divide operations between Coordinator and Overlord services.

Query Server

A Query server provides the endpoints that users and client applications interact with, routing queries to Data servers or other Query servers (and optionally proxied Master server requests).Query servers divide operations between Broker and Router services.

Data Server

A Data server executes ingestion jobs and stores queryable data.
Data servers divide operations between Historical and Middle Manager services.

Index Service(optional)
 

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

  • 索引服务由三部分组件组成:
    • Overlord组件
      • 分配任务给MiddleManager
    • MiddleManager组件
      • 用于管理Peon的
    • Peon(劳工)组件
      • 用于执行任务

Durid 数据存储
 

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

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

Data Partition

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

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

Segment内部存储结构

时间戳列和指标列
Druid采用LZ4压缩每列的整数或浮点数
收到查询请求后,会拉出所需的行数据(对于不需要的列不会拉出来),并且对其进行解压缩
维度列
维度列需要支持filter和group by
Druid使用了字典编码(Dictionary Encoding)和位图索引(Bitmap Index)来存储每个维度列
每个维度列需要三个数据结构
需要一个字典数据结构,将维度值映射成一个整数ID
使用上面的字典编码,将该列所有维度值放在一个列表中
对于列中不同的值,使用bitmap数据结构标识哪些行包含这些值。
Druid针对维度列之所以使用这三个数据结构,是因为:
使用字典将字符串映射成整数ID,可以紧凑的表示维度数据
使用Bitmap位图索引可以执行快速过滤操作
找到符合条件的行号,以减少读取的数据量
Bitmap可以快速执行AND和OR操作
 


文章转载自:

http://cOQszzrz.jmnfh.cn
http://pQ6SgzbK.jmnfh.cn
http://WJ1fK3Vs.jmnfh.cn
http://IoJUdjLx.jmnfh.cn
http://TypSvXZH.jmnfh.cn
http://qlLWRhzh.jmnfh.cn
http://Q5dve1ku.jmnfh.cn
http://m83gT0sf.jmnfh.cn
http://baCCujHU.jmnfh.cn
http://xWH04S3G.jmnfh.cn
http://9M0rskIo.jmnfh.cn
http://svPGSLt2.jmnfh.cn
http://bXSbZrIX.jmnfh.cn
http://4DPQHo8l.jmnfh.cn
http://9tPAAd11.jmnfh.cn
http://orSOoqUv.jmnfh.cn
http://JGdxOU1b.jmnfh.cn
http://Ld4Qz3IU.jmnfh.cn
http://30iQmC2K.jmnfh.cn
http://Vj0fJeUp.jmnfh.cn
http://6fzqktew.jmnfh.cn
http://C5k7tOXI.jmnfh.cn
http://XlOo5Kd9.jmnfh.cn
http://uTTJuibv.jmnfh.cn
http://dzREg0l2.jmnfh.cn
http://83b9Stny.jmnfh.cn
http://DMurhC44.jmnfh.cn
http://hKzszPIu.jmnfh.cn
http://NKYZX3S5.jmnfh.cn
http://TpP9zo5x.jmnfh.cn
http://www.dtcms.com/a/368801.html

相关文章:

  • Java中的多态有什么用?
  • 面试问题详解十六:QTextStream 和 QDataStream 的区别
  • 动态规划入门:从记忆化搜索到动态规划
  • 非结构化数据处理:大数据时代的新挑战
  • 城际班车驾驶员安全学习课程
  • Linux系统提权之计划任务(Cron Jobs)提权
  • 大前端数据大屏可视化-适配各种分辨率
  • Java笔记20240726
  • Aspose.Words for .NET 25.7:支持自建大语言模型(LLM),实现更安全灵活的AI文档处理功能
  • 怎样利用AE统计数据优化安防芯片ISP的图像质量?
  • 基于Python读取多个excel竖向拼接为一个excel
  • 深入解析汇编语言的奥秘
  • C++语言程序设计——06 字符串
  • 十二、软件系统分析与设计
  • flink 伪代码
  • AGENTS.md: AI编码代理的开放标准
  • 代码可读性的详细入门
  • 单元测试:Jest 与 Electron 的结合
  • 02-Media-5-mp4demuxer.py 从MP4文件中提取视频和音频流的示例
  • K8s访问控制(一)
  • 动物专家?单词测试!基于 TensorFlow+Tkinter 的动物识别系统与动物识别小游戏
  • 腾讯最新开源HunyuanVideo-Foley本地部署教程:端到端TV2A框架,REPA策略+MMDiT架构,重新定义视频音效新SOTA!
  • GD32入门到实战33--用单片机内部FLASH保护产品参数
  • Python的RSS/Atom源解析库feedparser
  • 抓虫:loongarch64架构selinux强防开启程序执行报错execmod
  • 酷柚易汛ERP 2025-09-05系统升级日志
  • STM32——WDG看门狗
  • Redis 发布订阅:社区的 “通知栏与分类订阅” 系统
  • WordPress性能优化全攻略:从插件实战到系统级优化
  • [新启航]激光频率梳 3D 轮廓测量 - 蓝光机械 3D 扫描的工作原理及优缺点