概览
Druid(“德鲁伊”)是由广告公司MetaMarkets开源的一款开源的,为实时和离线数据的亚秒级查询设计的实时大数据分析引擎,主要用于大规模事件流数据(Event Stream Data)的存储和分析。是一个快速的列式分布式的支持实时分析的数据存储系统。它在处理PB级数据、毫秒级查询、数据实时处理方面,比传统的OLAP系统有了显著的性能改进。
特性
- 列式存储Druid单独存储并压缩每一列数据。并且查询时只查询特定需要查询的数据,支持快速scan,ranking和groupBy。
- 原生检索索引Druid为string值创建反向索引以达到数据的快速搜索和过滤。
- 流式和批量数据摄入开箱即用的Apache kafka,HDFS,AWS S3连接器connectors,流式处理器。
- 灵活的数据模式Druid优雅地适应不断变化的数据模式和嵌套数据类型。
- 基于时间的优化分区Druid基于时间对数据进行智能分区。因此,Druid基于时间的查询将明显快于传统数据库。
- 支持SQL语句除了原生的基于JSON的查询外,Druid还支持基于HTTP和JDBC的SQL。
- 水平扩展能力百万/秒的数据摄入速率,海量数据存储,亚秒级查询。
- 易于运维可以通过添加或移除Server来扩容和缩容。Druid支持自动重平衡,失效转移。
使用场景
Apache Druid适用于对实时数据提取,高性能查询和高可用要求较高的场景。因此,Druid通常被作为一个具有丰富GUI的分析系统,或者作为一个需要快速聚合的高并发API的后台。Druid更适合面向事件数据。
比较常见的使用场景:
- 点击流分析(web和mobile分析)
- 风控分析
- 网路遥测分析(网络性能监控)
- 服务器指标存储
- 供应链分析(制造业指标)
- 应用性能指标
- 商业智能/实时在线分析系统OLAP
架构
Druid是一组系统,按照职责分成不同的角色。目前存在五种节点类型:
- Historical: 历史节点的职责主要是对历史的数据进行存储和查询,历史节点从Deep Storage下载Segment,然后响应Broker对于Segment的查询将查询结果返回给Broker节点,它们通过Zookeeper来声明自己存储的节点,同时也通过zookeeper来监听加载或删除Segment的信号。
- Coordinator:协调节点监测一组历史节点来保证数据的可用和冗余。协调节点读取元数据存储来确定哪些Segment需要load到集群中,通过zk来感知Historical节点的存在,通过在Zookeeper上创建entry来和Historical节点通信来告诉他们加载或者删除Segment
- Broker:节点接收外部客户端的查询,并且将查询路由到历史节点和实时节点。当Broker收到返回的结果的时候,它将结果merge起来然后返回给调用者。Broker通过Zook来感知实时节点和历史节点的存在。
- Indexing Service: 索引服务是一些worker用来从实时获取数据或者批量插入数据。
- Realtime:获取实时数据

除了上述五个节点,Druid还有三个外部依赖:
- Zookeeper集群
- 元数据存储实例:Mysql
- Deep Storage:HDFS
Druid对比Impala/Presto/Spark SQL/Kylin/Elasticsearch
对比项目 | Druid | Kylin | Presto | Impala | Spark SQL | ES |
---|---|---|---|---|---|---|
亚秒级响应 | Y | Y | N | N | N | N |
百亿数据集 | Y | Y | Y | Y | Y | Y |
SQL支持 | N(开发中) | Y | Y | Y | Y | N |
离线 | Y | Y | Y | Y | Y | Y |
实时 | Y | N(开发中) | N | N | N | Y |
精确去重 | N | Y | Y | Y | Y | N |
多表Join | N | Y | Y | Y | Y | N |
JDBC for BI | N | Y | Y | Y | Y | N |
相关导航
暂无评论...