点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(正在更新…)
章节内容
上节我们完成了如下的内容:
- Flink 数据下沉到 Kudu
- 编写代码测试案例
Druid 介绍
数据分析的基础架构可以分为以下几类:
- 使用Hadoop、Spark进行分析
- 将Hadoop、Spark的结果导入到RDBMS中提供数据分析
- 将结果保存到容量更大的NoSQL数据库中,解决数据分析的存储瓶颈,例如:HBase
- 将数据源进行流式处理,对接流式计算框架(如Storm、Spark、Flink),结果保存到RDBMS或NoSQL中
- 将数据源进行流式处理,对接分析数据库,例如:Druid
- 互联网技术的快速增长催生出了各类大体量的数据,Hadoop很大的贡献在于帮助企业将他们那些低价值的事件流数据转换为高价值的聚合数据。
- Hadoop擅长的是存储和获取大规模数据,它并不提供任何性能上的保证它们能够很快的取到数据,虽然Hadoop是高可用的系统,但在高并发下负载下性能会下降。
- Hadoop是一个很好的后端、批量处理和数据仓库系统,在一个需要高并发的并且保证查询性能和数据可用性,并需要提供产品级的保证的需求,Hadoop并不能够满足。
- Druid是Metamarkets(一家为在线媒体或广告公司提供数据分析服务的公司)退出的一个分布式内存实时分析系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。
- Druid是一个开源的数据分析引擎工具,为实时和历史数据的次秒级(多于一秒)查询设计,主要应用于对数据的OLAP查询,Druid提供低延迟(实时)的数据摄取、灵活的数据探索、快速的数据聚合。现在的Druid部署已支持扩展到数万亿时间和PB级数据。
数据摄取层 (Ingestion Layer)
- 任务管理器 (Supervisor):负责管理数据摄取任务。
- 数据源 (Data Sources):是 Druid 中的基本概念,用于表示一组数据。
存储层 (Storage Layer)
- Druid 使用列式存储来优化查询性能。数据按列存储,以提高聚合和过滤的效率。
- Segments:数据在 Druid 中被划分为称为 segments 的块,每个 segment 通常包含一个时间范围内的数据。
查询层 (Query Layer)
- Druid 支持多种查询类型,包括实时查询、批量查询和复杂的聚合查询。
- 查询协调器 (Query Coordinator):负责管理查询请求和将请求分发到不同的节点。
索引层 (Indexing Layer)
- Druid 采用一种基于时间的索引策略,支持实时和历史数据的快速查询。
- 支持多种索引类型,包括基本索引、维度索引和时间索引。
服务层 (Service Layer)
- Druid 的架构中包括多个服务,如 Broker、Historical、Middle Manager 等,负责数据的查询和摄取。
- Broker:接受查询请求,并将其路由到合适的 Historical 或实时节点。
- Historical:存储历史数据并处理查询。
- Middle Manager:负责摄取和处理实时数据流。
与OLAP对比
SparkSQL / Impala / ClickHouse,支持海量数据,灵活性强,但对响应时间没有保证,当数据量和计算复杂度增加后,响应时间会变慢,从秒级到分钟级,甚至小时级都有可能。
搜索引擎架构的系统(Elasticsearch等),在入库的时候将数据转换为倒排索引,牺牲了灵活性换了很好性能,在搜索的查询上做到了亚秒级别的响应,但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级别。
Druid/Kylin,在入库的时候对数据进行预聚合,进一步牺牲灵活性来换取性能,实现对超大数据集的秒级响应。
- Kylin利用Hadoop HBase做计算和存储,使用SQL查询,提供JDBC、ODBC驱动与常见的BI工具的集成
- Druid有自己独立的分布式集群,能够实时摄入数据,有自己的查询接口(与BI兼容性较弱),通常用于实时要求高的场景
目前没有一个OLAP分析引擎能在数据量、灵活程度、性能、吞吐、并发做到完美,需要基于自己的业务场景进行选择。
技术特点
基本介绍
Apache Druid 是一个开源的、分布式、实时OLAP分析工具,Druid的核心结合了数据仓库、时间序列数据库和搜索系统的思想,适用于多种场景的高性能数据实时分析。Druid将这三个系统中的每个系统的关键特征合并到其接收层、存储格式、查询层和核心体系结构中。
时间序列数据库主要用于处理、带时间标签(按照时间的顺序变化)的数据,带时间标签的数据也称为时间序列数据。
时间序列数据库主要用于电力行业、化工行业等各类实时监测、检查、分析设备所采集、产生的数据,这些工业数据的典型特点是:
- 产生频率快(每一个监测点一秒钟可内可以产生多条数据)
- 严重依赖于采集时间(每一条数据均要求对应唯一的时间)
- 测点多信息大(常规的实时检测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据)。
主要特点
列式存储
Druid独立的存储和压缩每一列,主需要读取特定查询所需的内容,这可以支持快速扫描、排名和聚合。
流式和批量摄取(Ingestion)
支持Apache Kafka、HDFS、AWS S3 等现成的连接器
本地的搜索索引
Druid为字符串创建倒排索引,以支持快速搜索和排序
灵活的Schema
Druid可以处理变化的Schema和嵌套数据
基于时间优化Partition
Druid基于时间智能的对数据进行分区,基于时间的查询比传统数据库要快的多
支持SQL
Druid支持本机的JSON语言,还支持基于HTTP或者JDBC的SQL
水平扩展性
Druid已经用户生产环境中,每秒接收百万个事件,保存多年的数据并提供次秒级查询
操作简单
只需要增加或删除服务器即可扩展或缩小规模,Druid会自动平衡,容错架构通过服务器的故障进行路由。
集成
Druid是开源大数据的技术补充,包括Apache Kafka、Apache Hadoop、Apache Flink等,通常位于存储或处理层与最终应用之间,充当查询层或数据分析服务。
Ingestion(摄取)
Druid支持流式传输和批量社区,Druid连接到数据源,包括:Kafka(用于流数据加载),或分布式文件系统,如HDFS(用于批处理数据加载)。
存储
Druid的数据存储采用列式存储格式,根据列的类型(字符串、数字等),应用不同的压缩和编码方法,根据列类型不同的类型的索引
Druid为字符串列构建倒排索引,以进行快速搜索和过滤,Druid可按时间对数据进行智能分区,以实现面向时间的快速查询。
Druid在摄取数据时对数据进行预聚合,节省大量的存储空间。
查询方式
Druid支持JSON、SQL两种方式查询数据。
应用场景
Druid擅长的部分:
- 对于大部分查询场景可以亚秒级响应
- 事件流实时写入与批量数据导入兼备
- 数据写入前预聚合节省存储空间,提升查询效率
- 水平扩容能力强
- 社区活跃
具体的方向有如下:
- 实时数据分析:对实时数据流(如日志、传感器数据等)进行快速分析和可视化。
- 商业智能:用于商业分析,支持快速的报告生成和自助式数据探索。
- 监控和指标分析:适合监控应用程序性能、用户行为分析以及操作指标。
- 网络分析:处理网络流量数据,以便快速检测异常或进行趋势分析。
- 复杂事件处理 (CEP):实时处理和分析事件流,帮助企业快速响应市场变化。
- 机器学习预处理:作为机器学习模型的输入,提供快速的数据摄取和处理能力。
那是否需要Druid呢?
- 处理时间序列事件
- 快速的聚合以及探索式分析
- 近实时的分析 亚秒级响应
- 存储大量(TB、PB级别)可以预先定义若干维度的事件
- 无单点问题的数据存储