Druid架构分析(四)

Broker作为真正对外提供服务的节点,并不“拥有”数据。Broker Node查询Realtime Nodes和Historical Nodes的数据并在需要的时候将结果集合并。

查询过程概述

关于查询的一些细节

查询结果的缓存 Broker Node内部维护了一个LRU Cache,这个缓存可以是Local memory,也可能是一个分布式Cache。对于每次的查询请求,Broker Node会现在Cache中查找是否缓存了该Segment的结果。如果存在则避免重复计算。如果结果不存在则Broker会将请求转发给Historical Node和Real-time Node。返回结果后Broker Node将Historical Node的结果缓存。 由于实时节点的数据不停变化,所以Cache这部分数据没有意义。从某种意义上说Cache可以在Historical Node失败的情况下。起到一个暂时持久化的作用(仅针对已有过的查询请求)。

关于Broker Node可用性 Broker Node本身可以多点部署,所以可用性问题不大。不过考虑到zookeeper作为整个Druid的状态持久化的存储,一旦zookeeper失联该如何处理?Broker Node会利用其最后Cache的集群状态,来转发查询请求。所以即便是zookeeper不可用了。Druid还是能够坚持一段时间的。

查询组件丰富  虽然Druid并没有类似关系数据库的查询计划,但是其内部的查询组件非常丰富。下面简单列一下: