Apache Druid 简介


1 ApacheDruid是什么?

  • ApacheDruid(以下简称“druid”)是阿里开源的连接池,是目前Java语言中最好的数据库连接池。

  • Druid可以提供强大的数据监控与扩展能力。

  • Druid是一种支持OLAP多维实时分析的高性能数据处理系统,通常用来处理海量数据。

  • Druid经常被用来分析应用程序GUI或者高并发API的数据库后台。
  • Druid最适合于事件导向数据。

2 Apachedruid特征

1)快速构建应用。

Druid支持快速实时分析,特别是用于实时数据可见和高并发的工作流程。如此一来,Druid就能满足向UI提供实时反馈的需求,从而满足用户体验。

2)便于已有数据管道的集成

Druid可以从总线流(例如Kafka,AmazonKinesis)中获得数据,也可以从数据湖(例如HDFS,AmazonS3这样的类似数据源)批量装载文件。

3)快速查询并发情况

实验证明,Druid算法的性能明显优于传统算法。

Druid将现代存储概念、索引结构和精确查询结合起来。概要查询在秒钟内返回查询结果。

4)适用面广
Druid为点击流、APM、供应链、网络遥测、数字营销、风险/欺诈以及其他数据类型解锁了新型查询和工作流程。Druid为实时数据、历史数据的实时查询而生。

Druid是实时查询实时数据和历史数据。

5)支持公共云、私有云和混合云的部署。

Druid可以部署到任意UNIX环境,不管是在云中还是本地。

6)强大的监控特性

Druid内建了一个强大的StatFilter插件,它能够监测数据库访问性能,并清楚地了解连接池和SQL的工作情况。

监控SQL执行时间、ResultSet保留时间、返回行数量、更新行数量、错误数量和错误堆栈信息。

SQL执行O-Time分布。那么,时间间隔分布是怎样的?例如,一个SQL执行了1000次,其中0-1毫秒间隔50次,1-10毫秒800次,10-100毫秒100次,100-1000毫秒30次,10-10秒15次,10-10秒5次。利用时间间隔分布,可以很好地了解SQL执行时所需的时间。

Druid监控物理连接的创建、破坏次数,逻辑连接的申请、关闭数量、非空等待次数、PSCache命中率等。

3 Apache Druid架构

3.1 相关概念

1)数据源(Datasource)

Druid的数据都存储在Datasource,即数据源中,每个数据源会根据Druid的数据规范来进行存储。

2)段(Segment)
Druid里的每个数据源都会按一定的规范来进行分段存储,一般而言会安州时间来进行划分(当然也可以选择其他的属性作为划分依据)。

每一个时间区间被视作是一个Chunk,每一个Chunk又会被分成许多个Segment。每一个Segment都是一个独立的文件。

3.2 Druid架构

Druid是一个多进程分布式架构,其中每个不同类型的进程都能进行独立的扩展和配置,这样就使得用户集群具备较高的自由度,且容错率提高。

Apache Druid,Druid,ApacheDruid,Druid教程,Druid是什么

Druid的节点进程类型主要包含以下部分:

  • Historical(历史节点)

Historical是负责处理存储、查询历史数据的节点。该节点从Deep Storage中下载数据段(即Segment)并由Broker返回查询结果。Historical节点不接受数据的直接写入。

  • Broker(代理节点)

Broker节点用于接收外部客户端的查询请求,并将查询发送至Historical节点和MiddleManger节点。

  • MiddleManager(可以理解为overlord节点的工作节点) 

MiddleManger节点负责从外部数据源读取数据然后发布到本地Segments中去。

  • Coordinator(协调节点)

Coordinator节点负责分配和加载Segments到服务器上,它们能够保证这些segments在Historicals节点上的分布是均匀。

  • Overload(index service  可以理解为任务管理节点)

Overlord节点用于监控MiddleManager进程,主要负责将数据摄取任务分配到相应的MiddleManager中,以及在这个过程中协调Segment的发布。

  • Router

Router节点是可选的。它会为Broker,Overlord,Coordinator提供一个统一的网关API来进行访问。

上述这些Druid进程都能进行独立部署,即可以部署在物理机、虚拟机、或者其他容器上,也可以托管在共享服务器上。

常见的托管管理包含以下3种类型:

  1. 数据节点负责运行Historical以及MiddleManager进程

  2. 查询节点负责运行Broker和Router进程(可选)

  3. Master节点负责运行Coordinator和Overlord进程

除了这些进程以外,Druid还提供了3个外部依赖,这些依赖会影响现有集群的基础建设:

  1. Deep storage在Druid服务器之间提供文件共享功能。当然这些都是分布式的文件存储系统比如像S3、HDFS以及一些网络文件系统,Druid利用这种文件系统来存储那些已经被摄取到系统中的数据。
  2. Metadata store负责元数据存储,一般用传统的RDBMS比如PostgreSQL或者MySql来存储。
  3. Zookeeper负责协调Druid不同组件内部的服务。

4 Apache Druid的使用人群

  • 数据插入频率比较高,但较少更新数据

  • 大多数查询场景为聚合查询分组查询(GroupBy),同时还有一定的检索与扫描查询

  • 将数据查询延迟目标定位100毫秒到几秒钟之间

  • 数据具有时间属性(Druid针对时间做了优化和设计)

  • 多表场景下,每次查询仅命中一个大的分布式表,查询又可能命中多个较小的lookup表

  • 场景中包含高基维度数据列(例如URL,用户ID等),并且需要对其进行快速计数和排序

  • 需要从Kafka、HDFS、对象存储(如Amazon S3)中加载数据

本文主要对Druid做了入门级的基础介绍,可以给大家做Olap引擎技术选型时做一个参考。Druid是一款非常优秀的Olap引擎,从性能、稳定性上来说,都是非常不错的。