coordinator是Druid的中心协调模块,用于解耦各个模块之间的直接联系,负责segment的管理和分发,用于控制历史节点上的segment装在和移除,并且保持segment在各个历史节点上的负载平衡.
druid coordinator采用定期运行任务的设计模式,它包含一些不同目的的任务.它并不直接和历史节点发生调用关系,而是通过zookeeper作为桥梁,将指令发送到zookeeper上,历史节点湖区zookeeper上的指令来装在和移除segment,所以每个历史节点不需要看到整个集群的情况.
coordinator装载和移除segment的一句来自于一系列规则,这些规则可以通过druid的管理工具或者参数来配置.这些规则包括:
永久装载(loadForever)
时间段装载(loadByInterval)
最近时段装载(loadByPeriod)
另外,也可以设置移除drop规则,类似于装载规则.
coordinator的代码入口在$druid\server\src\main\java\io\druid\server\coordinator\Druid-Coordinator.java.大部分核心代码在相同目录中也可以找得到
DruidCoordinator引入了不少管理类,用于获取segment与集群的信息和管理能力.
coordinator启动是从start()开始的,首先通过zookeeper的leaderLatch选取一个leader,确定好一个leader后,这个leader就会定期运行一些任务.