【Druid】Historical Node

历史节点负责加载历史segment,使segment数据能够被查询。

Running

io.druid.cli.Main server historical

Loading and Serving Segments

每一个历史节点维护着一个与ZK的长连接,监控着新segment加入的消息。历史节点彼此之间以及与协调节点(coordinator nodes)之间不会直接通信,所有的通信过程只依赖于ZK。

协调节点负责分配新的segment给历史节点,分配的过程是通过在ZK中对应某个历史节点的加载队列路径下创建临时znode完成的。

当某个历史节点在ZK中属于自身的加载队列路径下发现一个新的segment分配信息时,它首先会去本地cache中检查是否有该segment的信息。如果确认本地cache中不存在该segment的信息,即从ZK中下载该segment的元数据信息到本地。segment的元数据信息中包含该segment在底层存储的路径以及解压缩和处理该segment的方法。一旦某个历史节点完成对一个新segment的处理,历史节点会通知ZK将该segment以“已服务”的状态标记在该历史节点对应的已服务segment列表中。至此,我们就可以从这个新的segment中查询到数据了。

Loading and Serving Segments From Cache

回想一下上一节提到的当历史节点发现一个需要加载的新segment信息时,首先会去自身本地cache中检查该segment是否存在。如果该segment已在本地cache中存在时,历史节点会直接读取该segment的二进制文件并加载。

在重新启动时,历史节点会查询本地cache目录,加载它查询到的segment。这个机制能够保证历史节点上线时可以尽早地服务于查询。

历史节点能够通过配置对它服务的每个查询请求记录日志和上报metrics信息。

HTTP Endpoints

历史节点提供的接口:

GET

  • /status
    返回Druid的版本信息、加载扩展、使用内存、全部内存和该节点其他有用的信息
  • /druid/historical/v1/loadstatus
    返回历史节点是否已经加载本地cache中全部segment的标记。该接口可以用来确认在历史节点重启后是否能够提供查询服务。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。