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

标签 druid

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

当我启动一个选择查询时,结果在 30 多秒内第一次返回。接下来,它们排在第二位(因为代理缓存)。

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

问题:强制历史节点将所有数据缓存在内存中的配置参数是什么?

最佳答案

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

  • 在历史节点缓存
  • 在代理节点缓存
  • 页面缓存

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

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

    关于Druid:如何在内存中缓存所有历史节点数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41415296/

    相关文章:

    docker - org.apache.druid.java.util.common.ISE : No default server found

    java - Kafka-在JAAS配置中找不到“KafkaClient”条目

    google-cloud-platform - GCP Dataproc 已推出 Druid alpha 版。如何加载段?

    linux - 找不到类 'org.apache.hadoop.hive.druid.DruidStorageHandler'

    cassandra - 德鲁伊能取代 Cassandra 吗?

    docker - 为Druid构建Docker镜像时出错

    apache-superset - Superset 能否可视化从 REST API 调用返回的数据?

    hadoop - 无法从 Hive 外部表上的 Druid 数据源查询数据

    druid - druid 中的时间戳规范