注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的处理结果组合起来,返回给客户端。
网友评论