深层存储不可达时Druid运行行为及数据查询能力咨询
Druid 0.19.0 HDFS深层存储不可访问时的运行表现及服务能力说明
核心运行表现
当HDFS深层存储节点无法访问时,Druid各组件会出现以下明确表现:
- Coordinator节点:无法完成Segments的发布、下线、副本分配等元数据操作,日志中会持续抛出
IOException类HDFS连接异常,已完成发布的Segments元数据不会丢失,但新生成的Segments无法持久化到深层存储 - Historical节点:已经加载到本地磁盘缓存的Segments不受影响,无法加载还未缓存的冷Segments,请求未缓存Segments时会返回查询失败
- MiddleManager/Indexer节点:实时摄入任务生成的待持久化Segments无法写入HDFS,会不断触发重试逻辑,超过任务配置的持久化超时阈值后,实时摄入任务会失败终止
- Broker节点:本身无直接报错,会按照元数据路由查询请求,查询命中已缓存Segments时正常返回,命中未缓存Segments时返回对应错误
对外服务能力判断
并非完全不可对外提供服务,可正常响应两类查询:
- 所有已经被Historical节点加载到本地磁盘缓存的历史Segments的查询请求
- Kafka实时摄入链路中,还在Peon任务内存、或还未触发持久化的实时数据的查询请求
不可响应的查询只有一类:需要访问还未加载到Historical本地缓存的冷历史Segments的请求。结合每5分钟执行一次定时查询的场景,若定时查询只覆盖热数据范围,大概率不会触发报错。
可服务时长
可服务时长完全取决于两个核心因素,没有固定值:
- 已经加载到Historical本地的热数据的缓存保留时长:默认配置下,Historical不会主动删除已经加载的Segments,只要本地磁盘空间足够,这部分数据可以一直提供查询
- 实时摄入任务的最大重试超时时间:Druid 0.19.0版本默认的实时摄入持久化重试超时为1小时,若做过自定义配置则以实际配置为准,超过这个阈值后实时摄入任务失败,新的Kafka数据无法继续摄入,也就无法查询最新数据
最新摄入数据查询能力
在实时摄入任务还未因持久化失败终止前,完全可以查询最新摄入的数据:
- Kafka实时摄入的链路中,数据进入Peon任务的内存缓冲区后,就可以被查询到,这部分数据不需要提前写入深层存储就可以对外提供查询
- 只有当Peon任务触发Segments持久化、多次尝试写入HDFS失败超过阈值后,任务退出,后续新流入Kafka的数据才无法被摄入查询
提示:如果深层存储故障恢复后,需要手动重启失败的实时摄入任务,避免数据断层;同时Coordinator会自动补推所有故障期间未持久化成功的Segments到HDFS,不需要额外手动操作。
内容的提问来源于stack exchange,提问作者Khalil Kooli
相关产品推荐
相关产品推荐

