1 ApacheDruid是什么?
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是一个多进程分布式架构,其中每个不同类型的进程都能进行独立的扩展和配置,这样就使得用户集群具备较高的自由度,且容错率提高。
Druid的节点进程类型主要包含以下部分:
Historical是负责处理存储、查询历史数据的节点。该节点从Deep Storage中下载数据段(即Segment)并由Broker返回查询结果。Historical节点不接受数据的直接写入。
Broker节点用于接收外部客户端的查询请求,并将查询发送至Historical节点和MiddleManger节点。
- MiddleManager(可以理解为overlord节点的工作节点)
MiddleManger节点负责从外部数据源读取数据然后发布到本地Segments中去。
Coordinator节点负责分配和加载Segments到服务器上,它们能够保证这些segments在Historicals节点上的分布是均匀。
- Overload(index service 可以理解为任务管理节点)
Overlord节点用于监控MiddleManager进程,主要负责将数据摄取任务分配到相应的MiddleManager中,以及在这个过程中协调Segment的发布。
Router节点是可选的。它会为Broker,Overlord,Coordinator提供一个统一的网关API来进行访问。
上述这些Druid进程都能进行独立部署,即可以部署在物理机、虚拟机、或者其他容器上,也可以托管在共享服务器上。
常见的托管管理包含以下3种类型:
-
数据节点负责运行Historical以及MiddleManager进程
-
查询节点负责运行Broker和Router进程(可选)
- Master节点负责运行Coordinator和Overlord进程
除了这些进程以外,Druid还提供了3个外部依赖,这些依赖会影响现有集群的基础建设:
- Deep storage在Druid服务器之间提供文件共享功能。当然这些都是分布式的文件存储系统比如像S3、HDFS以及一些网络文件系统,Druid利用这种文件系统来存储那些已经被摄取到系统中的数据。
- Metadata store负责元数据存储,一般用传统的RDBMS比如PostgreSQL或者MySql来存储。
- Zookeeper负责协调Druid不同组件内部的服务。
4 Apache Druid的使用人群
-
数据插入频率比较高,但较少更新数据
-
大多数查询场景为聚合查询和分组查询(GroupBy),同时还有一定的检索与扫描查询
-
将数据查询延迟目标定位100毫秒到几秒钟之间
-
数据具有时间属性(Druid针对时间做了优化和设计)
-
在多表场景下,每次查询仅命中一个大的分布式表,查询又可能命中多个较小的lookup表
-
场景中包含高基维度数据列(例如URL,用户ID等),并且需要对其进行快速计数和排序
-
需要从Kafka、HDFS、对象存储(如Amazon S3)中加载数据
本文主要对Druid做了入门级的基础介绍,可以给大家做Olap引擎技术选型时做一个参考。Druid是一款非常优秀的Olap引擎,从性能、稳定性上来说,都是非常不错的。