深度存储不可达时Druid的行为

Druid's behavior when the deep storage is unreachable

当深层存储节点不再可达时,Druid 的行为是什么? 它能够暴露数据吗?多长时间?我们至少可以查询新摄取的数据吗?

上下文:

要了解可能发生的情况,让我们了解一些基础知识 -

什么是Druid的Deep storage - Deep storage就是存储段的地方。这种深度存储基础设施定义了你的数据的持久性级别,只要 Druid 进程可以看到这个存储基础设施并获取存储在其上的段,无论你丢失多少 Druid 节点,你都不会丢失数据。如果段从该存储层中消失,那么您将丢失这些段所代表的任何数据。

段是如何在深度存储中发布的- 它是由 druid 索引任务完成的(通过批量摄取任务或像 Kafka 索引这样的实时摄取任务)。

段在德鲁伊中的查询方式、时间和位置-:让我们把它分成两部分,一个用于 batch ingestion,另一个用于Streaming ingestion -

(1)批量摄取: 在这种情况下,索引任务处理数据,创建段 -> 在深度存储中发布段。一旦段在深度存储中发布。基于load rules。将段从深度存储复制到Historical的本地段缓存目录。根据查询需要,historical 将从其本地段缓存中加载内存中的段,计算并提供查询结果。

(2)Real-time ingestion - 简而言之,只要段未 created/published 进入深层存储,实时查询将从运行 实时索引任务。一旦实时任务从 Kafka/kinesis topic/stream 中读取行,它们就应该可供查询。创建段后,它们将首先复制到深度存储中,然后复制到历史记录中。

回答您的问题-

What is the behavior of Druid when the deep storage nodes are no more reachable? Is it able to expose data? For how long? Can we at least query the newly ingested data?

我假设,德鲁伊无法访问深层存储(即德鲁伊看不到深层存储)。那样的话,一般来说,可以看到如下效果-

(a) 摄取任务应该会失败,因为它们将无法在深层存储中发布它们的片段。

(b) Druid 将无法根据加载规则 load/drop 分段(即从深度 storage/or 中加载分段基于加载规则的段)。

(c) 对于实时索引任务,我认为,你应该能够查询到任务持续时间的实时数据,原因是,直到 taskDuration 间隔德鲁伊索引任务从你的实时流中读取数据,直到那时,我没有看到与深度存储的任何交互(理论上)但是索引任务将失败 post - 任务持续时间,因为它会尝试在深层存储中发布段,因为它不可访问。

但是,您应该能够查询您已经加载到德鲁伊集群中的任何段(即在历史的本地段缓存中)

我认为您应该解决深层存储可访问性问题,以确保一切正常并步入正轨。