1. Durid概述
Apache Druid是一个集工夫序列数据库、数据仓库和全文检索零碎特点于一体的剖析性数据平台。本文将带你简略理解Druid的个性,应用场景,技术特点和架构。这将有助于你选型数据存储计划,深刻理解Druid存储,深刻理解工夫序列存储等。
Apache Druid是一个高性能的实时剖析型数据库。
1.1 为什么应用
1.1.1 云原生数据库
一个现代化的云原生,流原生,剖析型数据库
Druid是为疾速查问和疾速摄入数据的工作流而设计的。Druid强在有弱小的UI,运行时可操作查问,和高性能并发解决。Druid能够被视为一个满足多样化用户场景的数据仓库的开源替代品。
1.1.2 轻松集成
轻松与现有的数据管道集成
Druid能够从音讯总线流式获取数据(如Kafka,Amazon Kinesis),或从数据湖批量加载文件(如HDFS,Amazon S3和其余同类数据源)。
1.1.3 超高性能
比传统计划快100倍的性能
- Druid对数据摄入和数据查问的基准性能测试大大超过了传统解决方案。
- Druid的架构交融了数据仓库,工夫序列数据库和检索系统最好的个性。
1.1.4 工作流
解锁新的工作流
Druid为Clickstream,APM(利用性能管理系统),supply chain(供应链),网络遥测,数字营销和其余事件驱动模式的场景解锁了新的查问形式和工作流。Druid专为实时和历史数据的疾速长期查问而构建。
1.1.5 多种部署形式
能够部署在AWS/GCP/Azure,混合云,k8s和租用服务器上
Druid能够部署在任Linux环境中,无论是外部环境还是云环境。部署Druid是十分easy的:通过增加或删减服务来扩容缩容。
1.2 应用场景
Apache Druid实用于对实时数据提取,高性能查问和高可用要求较高的场景。因而,Druid通常被作为一个具备丰盛GUI的剖析零碎,或者作为一个须要疾速聚合的高并发API的后盾。Druid更适宜面向事件数据。
1.2.1 常见的应用场景
比拟常见的应用场景
1.2.1.1 用户流动和行为
Druid常常用在点击流,拜访流,和流动流数据上。具体场景包含:掂量用户参与度,为产品公布追踪A/B测试数据,并理解用户应用形式。Druid能够做到准确和近似计算用户指标,例如不反复计数指标。这意味着,如日活用户指标能够在一秒钟计算出近似值(均匀精度98%),以查看总体趋势,或准确计算以展现给利益相关者。Druid能够用来做“漏斗剖析”,去测量有多少用户做了某种操作,而没有做另一个操作。这对产品追踪用户注册非常有用。
1.2.1.2 网络流
Druid经常用来收集和剖析网络流数据。Druid被用于治理以任意属性切分组合的流数据。Druid可能提取大量网络流记录,并且可能在查问时疾速对数十个属性组合和排序,这有助于网络流剖析。这些属性包含一些外围属性,如IP和端口号,也包含一些额定增加的强化属性,如地理位置,服务,利用,设施和ASN。Druid可能解决非固定模式,这意味着你能够增加任何你想要的属性。
1.2.1.3 数字营销
Druid经常用来存储和查问在线广告数据。这些数据通常来自广告服务商,它对掂量和了解广告流动成果,点击穿透率,转换率(消耗率)等指标至关重要。
Druid最后就是被设计成一个面向广告数据的弱小的面向用户的剖析型应用程序。在存储广告数据方面,Druid曾经有大量生产实践,全世界有大量用户在上千台服务器上存储了PB级数据。
1.2.1.4 利用性能治理
Druid经常用于追踪应用程序生成的可经营数据。和用户流动应用场景相似,这些数据能够是对于用户怎么和应用程序交互的,它能够是应用程序本身上报的指标数据。Druid可用于下钻发现应用程序不同组件的性能如何,定位瓶颈,和发现问题。
不像许多传统解决方案,Druid具备更小存储容量,更小复杂度,更大数据吞吐的特点。它能够疾速剖析数以千计属性的利用事件,并计算简单的加载,性能,利用率指标。比方,基于百分之95查问提早的API终端。咱们能够以任何长期属性组织和切分数据,如以天为工夫切分数据,如以用户画像统计,如按数据中心地位统计。
1.2.1.5 物联网和设施指标
Driud能够作为工夫序列数据库解决方案,来存储解决服务器和设施的指标数据。收集机器生成的实时数据,执行疾速长期的剖析,去估计性能,优化硬件资源,和定位问题。
和许多传统工夫序列数据库不同,Druid实质上是一个剖析引擎,Druid交融了工夫序列数据库,列式剖析数据库,和检索系统的理念。它在单个零碎中反对了基于工夫分区,列式存储,和搜寻索引。这意味着基于工夫的查问,数字聚合,和检索过滤查问都会特地快。
你能够在你的指标中包含百万惟一维度值,并随便按任何维度组合group和filter(Druid 中的 dimension维度相似于工夫序列数据库中的tag)。你能够基于tag group和rank,并计算大量简单的指标。而且你在tag上检索和过滤会比传统工夫序列数据库更快。
1.2.1.6 OLAP和商业智能
Druid常常用于商业智能场景。公司部署Druid去减速查问和加强利用。和基于Hadoop的SQL引擎(如Presto或Hive)不同,Druid为高并发和亚秒级查问而设计,通过UI强化交互式数据查问。这使得Druid更适宜做实在的可视化交互剖析。
1.2.2 适宜的场景
如果您的应用场景合乎以下的几个特色,那么Druid是一个十分不错的抉择:
- 数据插入频率比拟高,但较少更新数据
- 大多数查问场景为聚合查问和分组查问(GroupBy),同时还有肯定得检索与扫描查问
- 将数据查问提早指标定位100毫秒到几秒钟之间
- 数据具备工夫属性(Druid针对工夫做了优化和设计)
- 在多表场景下,每次查问仅命中一个大的分布式表,查问又可能命中多个较小的lookup表
- 场景中蕴含高基维度数据列(例如URL,用户ID等),并且须要对其进行疾速计数和排序
- 须要从Kafka、HDFS、对象存储(如Amazon S3)中加载数据
1.2.3 不适宜的场景
如果您的应用场景合乎以下特色,那么应用Druid可能是一个不好的抉择:
- 依据主键对现有数据进行低提早更新操作。Druid反对流式插入,但不反对流式更新(更新操作是通过后盾批处理作业实现)
- 提早不重要的离线数据系统
- 场景中包含大连贯(将一个大事实表连贯到另一个大事实表),并且能够承受破费很长时间来实现这些查问
2. Durid是什么
Apache Druid 是一个开源的分布式数据存储引擎。
Druid的外围设计交融了OLAP/analytic databases,timeseries database,和search systems的理念,以发明一个实用宽泛用例的对立零碎。Druid将这三种零碎的次要个性交融进Druid的ingestion layer(数据摄入层),storage format(存储格式化层),querying layer(查问层),和core architecture(外围架构)中。
2.1 次要个性
2.1.1 列式存储
Druid独自存储并压缩每一列数据。并且查问时只查问特定须要查问的数据,反对疾速scan,ranking和groupBy。
2.2.2 原生检索索引
Druid为string值创立倒排索引以达到数据的疾速搜寻和过滤。
2.2.3 流式和批量数据摄入
开箱即用的Apache kafka,HDFS,AWS S3连接器connectors,流式处理器。
2.2.4 灵便的数据模式
Druid优雅地适应一直变动的数据模式和嵌套数据类型。
2.2.5 基于工夫的优化分区
Druid基于工夫对数据进行智能分区。因而,Druid基于工夫的查问将显著快于传统数据库。
2.2.6 反对SQL语句
除了原生的基于JSON的查问外,Druid还反对基于HTTP和JDBC的SQL。
2.2.7 程度扩大能力
百万/秒的数据摄入速率,海量数据存储,亚秒级查问。
2.2.8 易于运维
能够通过增加或移除Server来扩容和缩容。Druid反对主动重均衡,生效转移。
2.3 技术选型
技术比照
Druid
是一个实时处理时序数据的OLAP数据库,它的索引首先依照工夫分片,查问的时候也是依照工夫线来路由索引。
Kylin
外围是Cube,Cube是一种预计算技术,事后对数据作多维索引,查问时只扫描索引而不拜访原始数据从而提速。
Presto
它没有应用MapReduce,大部分场景下比Hive快一个数量级,其中的要害是所有的解决都在内存中实现。
Impala
基于内存运算,速度快,反对的数据源没有Presto多。
Spark SQL
基于Spark平台上的一个OLAP框架,基本思路是减少机器来并行计算,从而进步查问速度。
ES
最大的特点是应用了倒排索引解决索引问题。依据钻研,ES在数据获取和汇集用的资源比在Druid高。
框架选型
- 从超大数据的查问效率来看:
Druid > Kylin > Presto > Spark SQL - 从反对的数据源品种来讲:
Presto > Spark SQL > Kylin > Druid
2.4 数据摄入
Druid同时反对流式和批量数据摄入。Druid通常通过像Kafka这样的音讯总线(加载流式数据)或通过像HDFS这样的分布式文件系统(加载批量数据)来连贯原始数据源。
Druid通过Indexing解决将原始数据以segment的形式存储在数据节点,segment是一种查问优化的数据结构。
2.5 数据存储
像大多数剖析型数据库一样,Druid采纳列式存储。依据不同列的数据类型(string,number等),Druid对其应用不同的压缩和编码方式。Druid也会针对不同的列类型构建不同类型的索引。
相似于检索系统,Druid为string列创立反向索引,以达到更疾速的搜寻和过滤。相似于工夫序列数据库,Druid基于工夫对数据进行智能分区,以达到更快的基于工夫的查问。
不像大多数传统零碎,Druid能够在数据摄入前对数据进行预聚合。这种预聚合操作被称之为rollup,这样就能够显著的节俭存储老本。
2.6 查问
Druid反对JSON-over-HTTP和SQL两种查问形式。除了规范的SQL操作外,Druid还反对大量的唯一性操作,利用Druid提供的算法套件能够疾速的进行计数,排名和分位数计算。
Drui被设计成一个强壮的零碎,它须要7*24小时运行。
Druid领有以下个性,以确保长期运行,并保证数据不失落。
2.6.1 数据正本
Druid依据配置的正本数创立多个数据正本,所以单机生效不会影响Druid的查问。
2.6.2 独立服务
Druid清晰的命名每一个主服务,每一个服务都能够依据应用状况做相应的调整。服务能够独立失败而不影响其余服务的失常运行。例如,如果数据摄入服务生效了,将没有新的数据被加载进零碎,然而曾经存在的数据仍然能够被查问。
2.6.3 主动数据备份
Druid主动备份所有曾经indexed的数据到一个文件系统,它能够是分布式文件系统,如HDFS。你能够失落所有Druid集群的数据,并疾速从备份数据中从新加载。
2.6.4 滚动更新
通过滚动更新,你能够在不停机的状况下更新Druid集群,这样对用户就是无感知的。所有Druid版本都是向后兼容。
3. 装置部署
3.1 环境介绍
3.1.1 Durid端口列表
以下是Durid默认的端口列表,避免因为端口占用导致服务器启动失败
角色 | 端口 | 介绍 |
---|---|---|
Coordinator | 8081 | 治理集群上的数据可用性 |
Historical | 8083 | 存储历史查问到的数据 |
Broker | 8082 | 解决来自内部客户端的查问申请 |
Realtime | 8084 | |
Overlord | 8090 | 控制数据摄取工作负载的调配 |
MiddleManager | 8091 | 负责摄取数据 |
Router | 8888 | 能够将申请路由到Brokers, Coordinators, and Overlords |
3.2 装置形式
获取Druid安装包有以下几种形式
3.2.1 源代码编译
druid/release,次要用于定制化需要时,比方结合实际环境中的周边依赖,或者是退出反对特定查问的局部的优化等。
3.2.2 官网下载
官网安装包下载:download,蕴含Druid部署运行的最根本组件
3.2.3 Imply组合套件
Imply,该套件蕴含了稳固版本的Druid组件、实时数据写入反对服务、图形化展现查问Web UI和SQL查问反对组件等,目标是为更加不便、疾速地部署搭建基于Druid的数据分析利用产品。
3.3 单机配置参考
3.3.1 Nano-Quickstart
1 CPU, 4GB 内存
- 启动命令:
bin/start-nano-quickstart
- 配置目录:
conf/druid/single-server/nano-quickstart
3.3.2 微型疾速入门
4 CPU, 16GB 内存
- 启动命令:
bin/start-micro-quickstart
- 配置目录:
conf/druid/single-server/micro-quickstart
3.3.3 小型
8 CPU, 64GB 内存 (~i3.2xlarge)
- 启动命令:
bin/start-small
- 配置目录:
conf/druid/single-server/small
3.3.4 中型
16 CPU, 128GB 内存 (~i3.4xlarge)
- 启动命令:
bin/start-medium
- 配置目录:
conf/druid/single-server/medium
3.3.5 大型
32 CPU, 256GB 内存 (~i3.8xlarge)
- 启动命令:
bin/start-large
- 配置目录:
conf/druid/single-server/large
3.3.6 超大型
64 CPU, 512GB 内存 (~i3.16xlarge)
- 启动命令:
bin/start-xlarge
- 配置目录:
conf/druid/single-server/xlarge
3.4 单机版装置
3.4.1 软件要求
- Java 8 (8u92+)
- Linux, Mac OS X, 或者其余的类Unix OS (Windows是不反对的)
- 装置Docker环境
- 装置Docker-compose环境
3.4.2 硬件要求
Druid包含几个单服务配置示例,以及应用这些配置启动Druid过程的脚本。
如果您在笔记本电脑等小型机器上运行以进行疾速评估,那么micro-quickstart配置是一个不错的抉择,实用于 4CPU/16GB RAM环境。如果您打算在教程之外应用单机部署进行进一步评估,咱们倡议应用比micro-quickstart更大的配置。
尽管为大型单台计算机提供了示例配置,但在更高规模下,咱们倡议在集群部署中运行Druid,以实现容错和缩小资源争用。
3.5 imply形式装置
装置举荐Imply形式,Imply形式出了提供druid组件,还有图形化、报表等性能
3.5.1 装置perl
因为启动druid 须要用到perl环境,须要装置下
yum install perl gcc kernel-devel
3.5.2 敞开防火墙
#查看防火状态systemctl status firewalld#临时敞开防火墙systemctl stop firewalld#永恒敞开防火墙systemctl disable firewalld
3.5.3 装置JDK
抉择与本人零碎相匹配的版本,我的是Centos7 64位的,所以如果是我的话我会抉择此版本,要记住的你们下载的话抉择的是以tar.gz结尾的。
3.5.3.1 下载JDK
到Oracle 官网下载jdk1.8,抉择jdk-8u301-linux-x64.tar.gz
将文件下载到本地后上传到linux目录下
3.5.3.2 上传解压
上传文件
mkdir /usr/local/java
解压目录
tar -zxvf jdk-8u301-linux-x64.tar.gz
3.5.3.3 配置环境变量
配置环境变量,批改profile文件并退出如下内容
vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_301export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$PATH:$JAVA_HOME/bin
3.5.3.4 失效配置
source /etc/profile
3.5.3.5 查看环境
java -version
3.5.4 装置imply
3.5.4.1 登录Imply官网
拜访https://imply.io/get-started,进入Imply官网,查找适合的imply的版本的安装包,并填写简要信息后就能够下载了
3.5.4.2 解压imply
下载后上传到服务器,并进行解压
# 创立imply装置目录mkdir /usr/local/imply# 解压implytar -zxvf imply-2021.05-1.tar.gz
3.5.4.3 环境筹备
进入imply-2021.05-1
目录后
# 进入imply目录cd imply-2021.05-1
3.5.4.4 疾速启动
应用本地存储、默认元数据存储derby,自带zookeeper启动,来体验下druid
# 创立日志目录mkdir logs# 应用命令启动nohup bin/supervise -c conf/supervise/quickstart.conf > logs/quickstart.log 2>&1 &
3.5.4.5 查看日志
通过quickstart.log
来查看impl启动日志
tail -f logs/quickstart.log
每启动一个服务均会打印出一条日志。能够通过var/sv/xxx/current查看服务启动时的日志信息
tail -f var/sv/broker/current
3.5.4.6 拜访Imply
能够通过拜访9095
端口来拜访imply
的治理页面
http://192.168.64.173:9095/
3.5.4.7 拜访Druid
拜访8888
端口就能够拜访到咱们的druid
了
http://192.168.64.173:8888/
本文由传智教育博学谷 - 狂野架构师教研团队公布,转载请注明出处!
如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源