注 1: 本文介绍的是 Apache 的 Druid, 而非阿里的 Druid
注 2: 本文内容主要来自官网文档翻译
什么是 Druid
Druid 是一个开源分布式的数据存储.
druid.PNG
Druid 的特点
列式存储
可扩展分布式系统
大量并行处理
实时或批量数据摄入
自治愈, 自平衡
云原生, 容错的架构
高速过滤索引
近似算法
摄入时自动摘要
Druid 的基本架构
架构图如下所示:
druid-architecture.PNG
Druid 的节点类型
节点类型
- CoordinatorNodes
- OverlordNodes
- MiddleManagerNodes
- HistoricalNodes
- BrokerNodes
- RouterNods(可选的)
各节点都可以单独部署, 也可以部署在同一台服务器上. 下面是一种通用的部署方案, 将节点分成三类:
"数据" 服务器中部署 Historical 节点和 MiddleManager 节点
"查询" 服务器中部署 Broker 节点 (和可选的 Router 节点)
"主" 服务器中部署 Coordinator 节点和 Overlord 节点, Zookeeper 也可以放在其中.
外部依赖
- Deep Storage
- Metadata Store
- ZooKeeper
Druid 中的数据源
Druid 中的数据是用时间分割的一个个 chunk, 每个 chunk 中的数据被分成一个个 segment, 每个 segment 是一个单独的文件.
segment 在 MiddleManager 中被创建, 此时是可变且为提交的, 然后 segment 会被周期性的提交和发布, 从此就被写入到 Deep Storage, 成为不可变的, 并从 MiddleManager 转移到 Historical 中. 而关于这个 segment 的元数据就被存储到 Metadata Store.Coordinator 使用这些元数据来确定数据在哪个集群上.
Druid 的查询处理
Broker 会接收客户端的查询请求.
首先, Broker 会确定哪些 segment 是与当前查询相关的. 然后, Broker 会找到相应的 Historical 和 MiddleManager, 并把查询请求进行分解, 发送给相应的节点. 最后, Broker 会把 Historical 和 Middle Manager 的处理结果组合起来, 返回给客户端.
来源: http://www.jianshu.com/p/224b3dff2ece