Druid 历史节点懒加载机制原理
声明:此方案来自于gitHub,详情可见https://github.com/apache/incubator-druid/pull/6988
1. 解决问题
Druid集群由多个节点共同提供服务,不同节点之间各司其职。其中Historical(历史节点)的作用主要是从HDFS上拉取segment到本地,提供这部分segment的查询服务和处理路由到本地的查询。Historical在启动的时候会先加载本地segment文件,加载完成之后,这台节点才可以提供服务。
在生产环境中,我们会尽量追求灰度升级。此时,我们会利用历史节点多副本机制,滚动重启。这样可以确保,一个副本能够提供服务。但是,生产环境中的一台Historical节点上存储的数据量可能达到TB级别,重启加载时间可能达到40分钟+,服务重启周期长,人工耗费大,升级成本高。
究其根本,还是因为Historical加载时间过长导致。而懒加载机制直面了这一痛点。通过延迟加载的方式,先让节点和集群进入能过提供服务的状态。大大提升了升级和重启的速度。
2. 历史节点启动加载流程
Historical 服务启动后,segment正常的加载流程如下:
加载Segments
具体流程如下:
-
获取本地
info_dir
目录下的所有文件(cachedFile
,描述segment的文件)cachedFile文件内容如下:
{ "dataSource": "lazy_load_test", "interval": "2019-01-30T00:00:00.000+08:00/2019-02-01T00:00:00.000+08:00", "version": "2019-02-01T20:14:53.608+08:00", "loadSpec": { "type": "hdfs", "path": "/druid/segments/lazy_load_test/20190130T000000.000+0800_20190201T000000.000+0800/2019-02-01T20_14_53.608+08_00/0/index.zip&