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