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

组件

架构中可以看到,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状态查询等,如下图所示overlord

外部依赖

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

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

集群部署

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

集群信息

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

  • Overload
    在这里插入图片描述
  • Coordinator
    在这里插入图片描述

数据可视化

我们使用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可视化调研

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于创建独立的、基于Spring的生产级应用程序的框架。它简化了Spring应用程序的开发过程,并提供了许多开箱即用的功能和约定,使开发人员能够更快速地构建应用程序。 Druid是一个开源的Java数据库连接池。它提供了高性能、可扩展和可管理的数据库连接池实现,同时还提供了监控和统计功能,可以帮助开发人员更好地管理和优化数据库连接。 在Spring Boot中使用Druid作为数据库连接池非常简单。首先,需要在pom.xml文件中添加Druid的依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 然后,在application.properties或application.yml文件中配置Druid的属性: ```yaml spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # Druid相关配置 spring.datasource.druid.initial-size=5 spring.datasource.druid.min-idle=5 spring.datasource.druid.max-active=20 spring.datasource.druid.max-wait=60000 ``` 这样就完成了Druid的配置。接下来,可以在代码中使用@Autowired注解将DataSource注入到需要使用的地方,例如DAO层的数据访问类。 需要注意的是,Druid还提供了丰富的监控和统计功能,可以在配置文件中进行相应的配置,以便在浏览器中查看相关信息。例如: ```yaml # Druid监控配置 spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.login-username=admin spring.datasource.druid.stat-view-servlet.login-password=admin ``` 这样就可以通过访问http://localhost:8080/druid/来查看Druid的监控页面。 总之,使用Spring Boot和Druid可以帮助开发人员更便捷地构建高性能、可管理的应用程序,并提供了丰富的监控和统计功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值