一、体系架构
### --- Druid进程和服务
~~~ # Coordinator
~~~ 进程管理群集上的数据可用性。
~~~ 从metastore中读取Segment的元数据,并决定哪些Segments需要被加载到集群中。
~~~ 使用ZooKeeper查看已经存在的历史节点,了解集群各个节点负载情况。
~~~ 创建一个ZK的条目告诉历史节点加载、删除、或者移动Segments
~~~ # Overlord
~~~ 进程控制数据提取工作负载的分配
~~~ # Historical
~~~ 进程存储可查询数据。提供对Segment的数据查询服务。
~~~ 与ZooKeeper通信,上报节点信息,告知ZK自己拥有哪些Segments。从ZooKeeper中获取执行任务
~~~ # MiddleManager
~~~ 进程负责提取数据
~~~ # Broker
~~~ 进程处理来自外部客户端的查询。
~~~ 负责将查询请求分发到历史节点和实时节点,并聚合这些节点返回的查询结果数据。
~~~ Broker节点通过zooeeper知道Segment都存放在哪些节点上
~~~ # Router
~~~ 进程是可选的进程,可以将请求路由到Broker、Coordinator、Overlords
### --- 根据线程的服务类型分为:
~~~ Master:Coordinator & Overload 进程,管理数据可用性和数据摄取
~~~ Data:Historical & MiddleManager,执行提取工作负载并存储所有可查询数据
~~~ Query:Broker & Router,处理来自外部客户端的查询
二、外部依赖
### --- 外部依赖
~~~ Deep Storage:深度存储,例如HDFS或者S3。不是用来存储查询数据的。
~~~ 而是作为数据的备份或者进程间数据交换
~~~ Metadata Storage:元数据存储,可以用RDBMS
~~~ ZooKeeper:服务发现、leader选举、服务协调