Druid:如何将所有历史节点数据缓存在内存中

DrW*_*ho3 5 druid

我在历史节点上存储了大约 10GB 的数据。然而该节点的内存消耗约为 2GB。

当我启动选择查询时,第一次返回结果的时间超过 30 秒。接下来,他们位居第二(因为经纪人缓存)。

我关心的是将任何查询的第一次选择减少到一秒。为了达到这样的性能,我认为如果历史节点将所有数据存储在内存中,这是一个好的开始。

问题:要强制历史节点将所有数据缓存在内存中,需要配置哪些参数?

小智 2

Druid 没有任何直接机制来强制缓存数据。要解决此问题,您可以尝试在启动时触发一些虚拟查询,这会将数据段加载到内存中。当 Druid 查询启动时,有不同级别的缓存发挥作用:

  1. 历史节点缓存
  2. 代理节点缓存
  3. 页面缓存

前两个缓存是可配置的,可以根据要求打开/关闭,而页面缓存完全由底层操作系统控制。由于在您的设置中,您在历史上有大量可用内存,因此我建议您在启动时触发虚拟查询,该查询跨越所有历史段,这会将所有段数据放入页面缓存中,并且稍后触发的任何查询都将从中受益。

历史缓存和代理缓存不会缓存段的整个数据,而只会缓存每个段的查询结果,因此,如果您的查询本质上非常动态并且每次都需要不同的聚合和过滤器,那么这些缓存将不会有用。