Druid调优指南(一)- Historical

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Druid调优指南(一)- Historical相关的知识,希望对你有一定的参考价值。

参考技术A 【翻译自 https://druid.apache.org/docs/latest/operations/basic-cluster-tuning.html

本文档提供Druid部署调优基础指南,涉及相关属性配置以及集群架构设想。

请注意,本文档提供一般性的指导原则和经验法则:对于集群调优来说,这些法则并不是绝对的,通用的,而且并没有完全覆盖到Druid属性调优的所有部分。

如果对于特定的case有疑问或者本文未尽事宜,请详询 https://druid.apache.org/community/ 。

Historical节点中堆使用主要集中在:

通常情况下,调整Historical堆大小的经验规则:(0.5GB * CPU核数),上限约为24GB。这个公式并不是一个硬性标准,仅供参考。

如果堆太大,则可能会导致GC时间过长,因此要设置一个24G左右的上限。

如果在Historical节点上启动了缓存,则缓存存储在堆中,大小由druid.cache.sizeInBytes决定。

Historical节点上的堆耗尽,说明配置错误或者所用的方式导致集群过载

目前处于试验阶段,暂不说明

关于 Historicals:

当历史节点处理查询请求时,它需要读取segments,此时,需要一些直接内存空间。

预估直接内存使用量的公式:

对于历史节点,druid.server.http.numThreads 应设置为略高于druid.broker.http.numConnections 数量和(集群中所有broker节点相加)

可以从每个历史节点接收50个查询和10个非查询开始对集群连接池进行调优

druid.server.maxSize:Coordinator节点能够分配给一个Historical节点 segment 总的数据大小

druid.segmentCache.locations:segment 存储所在历史节点的位置,这些位置所在磁盘的大小应该大于等于druid.server.maxSize

历史节点利用可用的系统内存(没有被jvm以及堆/直接内存缓冲区使用的内存)将segment文件映射到内存中,当查询到来时,不在内存中的segment将会被从磁盘分页(从磁盘移动到内存)

因此,druid.server.maxSize的设置应该使历史节点不分配过量的segment。随着 (free system memory/druid.server.maxSize)值的增加,内存中可以保留更多的segment,提供更好的查询性能。

所需历史节点的数量依赖于数据量的大小。为了获取良好的性能,将需要足够的历史节点,以致于每个历史节点有一个好的比率(free system memory/ druid.server.maxSize),如上述 segment cache size部分描述的那样。

在对使用场景有足够的容错情况下,拥有较少的大型服务器通常比拥有较多的小型服务器要好。

我们建议历史节点采用SSD存储,因为该节点处理存储在磁盘上的segment数据。

根据如下指导来预估历史节点总的内存使用量:

历史节点将会使用任意可用的系统内存(jvm、堆/直接内存缓冲区以及系统上其他进程未使用到的内存)来对磁盘上的segments进行内存映射。为了获取更好的查询性能,需要确保一个合适的比率(free system memory/ druid.server.maxSize),这样就可以在内存中保留更大比例的segments。

续接 Druid调优指南(二)

以上是关于Druid调优指南(一)- Historical的主要内容,如果未能解决你的问题,请参考以下文章

SQL调优指南笔记16:Managing Historical Optimizer Statistics

JVM性能调优指南(一)

调优案例druid testOnBorrow参数问题

spark性能调优指南——高级篇

Android性能优化:这是一份Github下载超10万次的360°全方面性能调优指南(含内存优化布局优化等)

xgboost 参数调优指南