Druid

文章目录

  • 概要
  • 目标
  • 优势
  • 架构
    • 组件
    • 外部依赖
  • 集群部署
  • 集群信息
  • 数据可视化
  • 遇到问题

概要

Druid是一个列式分布式数据存储,支持PB级扩展,次秒级查询,常用于基于时间序列的实时数据存储。

目标

Druid论文中指出,Druid是为了解决Olap应用中,大数据的任意维度的次秒级聚合查询而诞生的,而开源的的RDBMS和NoSQL并不能做到。

优势

Druid有如下优势

  1. 列式存储
    Druid使用列式存储,列式存储可以查询指定的列,提升查询效率,同时可以根据每一列数据的类型做存储的优化。

  2. 弹性分布式系统
    Druid是分布式系统,内部由五部分组成,便于扩容。

  3. 并行执行
    被查询的数据会在MiddleManager NodesHistorical Nodes同时进行聚合操作计算,再在Broker Nodes汇总。

  4. 实时性
    ingested data可以立即被查询到。

  5. 24/7服务
    Druid集群能够自我平衡,即使部分节点异常,依然能正常运转。

  6. 容错、数据安全
    数据存在Deep storage,保证数据安全,以及用于数据恢复。

  7. 快速过滤
    Druid使用Concise: Compressed ’n’ ComposableInteger Set或者Roaring Bitmaps创建索引,实现快速过滤。

  8. 近似算法
    Druid提供近似算法,用于distinctranking等计算,适用于速度比准确性更重要的情景,例如著名的UV近似算法HyperLogLog。

  9. 提前聚合
    MiddleManager Nodes会提前对数据进行聚合操作,提升效率。

架构

Druid_第1张图片

组件

从架构中可以看到,Druid由如下五部分构成,并且各部分功能如下

  • MiddleManager Nodes
    1. 接收Overload节点分发的task,为每个task创建单独进程Peons,管理这些进程,每个task创建一个Segments,用于存储数据。
    2. 接收客户端(如tranquility)数据,保存SegmentGranularity配置的时间(一般为hour)后,交接Segment给Historical Nodes。
  • Historical Nodes
    1. 加载Segment到本地,为Broker Nodes提供查询服务。
  • Broker Nodes
    1. 为客户端提供数据查询服务,Broker能够同时查询MiddleManager Nodes和Historical Nodes中的Segments,并进行聚合操作。
  • Coordinator Nodes
    1. 管理集群中的segments,通知Historical Nodes加载新segments,删除过期Segment,以及负载均衡Segment。
  • Overlord Nodes
    1. 负责task的管理,包括接收提交的task、分发task给MiddleManager Nodes,kill task,提供task状态查询等,如下图所示Druid_第2张图片

外部依赖

从架构图中可以看到,Druid还有三个外部依赖环境,如下

  • Deep Storage
    永久存储Segment,为Historical Nodes提供下载,通常是HDFS和S3。
  • Metadata Storage
    推荐使用MySQL,用于存储Segment的元数据和配置、task等信息,如下图
    Druid_第3张图片
  • Zookeeper
    Druid集群各节点的状态信息等。

集群部署

生产环境的配置主要配置Deep Storage、Metadata Storage、Zookeeper和JVM信息。

集群信息

Overload和Coordinator能够查看集群和task等信息,如下图

  • Overload
    Druid_第4张图片
  • Coordinator
    Druid_第5张图片

数据可视化

我们使用Caravel对Druid数据进行可视化展示,其他方案可参考druid.io可视化调研。

遇到问题

Index Service task积压

  1. Coordinator节点异常
    Coordinator Node负责segments的管理,Coordinator异常导致segments不能正常分配,导致task积压。
  2. Historical nodes磁盘空间满了
    Historical nodes磁盘异常,不能正常接受MiddleManager Nodes的segments,导致积压。

参考
druid.io
druidio.cn
druid.pdf
druid.io可视化调研

你可能感兴趣的:(druid)