美文网首页Druid
Druid调优指南(三)- MiddleManager

Druid调优指南(三)- MiddleManager

作者: 收纳僧 | 来源:发表于2019-12-09 20:03 被阅读0次

    【翻译自https://druid.apache.org/docs/latest/operations/basic-cluster-tuning.html

    MiddleManager是一个轻量级的任务控制器/管理器,用于启动任务进程,执行摄入任务。

    MiddleManager heap sizing(堆大小调整)

    MiddleManager节点本身不需要较多的资源,通常设置 ~128M即可。

    SSD storage

    MiddleManager中的存储推荐使用SSDs,因为MiddlerManager启动的任务需要处理存储在磁盘中的segment数据。

    Task Count

    MiddleManager中能够启动的tasks的数量根据 druid.worker.capacity 来设置。

    所需worker的数量依赖需要运行多少并发的摄入任务。在给定的机器上能够启动的worker的数量取决于每个worker分配的资源大小和可用的系统资源。

    可以通过部署较多的MiddleManager机器来增加任务的容量。

    Task configurations

    下面的部分描述由MiddleManager启动的任务的配置。任务能被查询和执行摄入工作,因此相对于MM需要较多的资源。

    Task heap sizing

    对于Tasks,设置堆为1GB是足够的。

    Lookups

    Task processing threads and buffers(处理线程和缓存)

    通常来说,处理线程设置为1或者2是足够的,因为相对于历史节点,任务持有较少的可查询数据。

    druid.indexer.fork.property.druid.processing.numThreads:设置为 1 或者 2

    druid.indexer.fork.property.druid.processing.numMergeBuffers: 设置为 2

    druid.indexer.fork.property.druid.processing.buffer.sizeBytes:可以设置为 100MB

    Direct memory sizing (直接内存大小)

    上面描述的处理和合并缓冲区是直接内存缓冲区。

    当任务处理查询时,必须要打开一组segments进行读取。这个过程需要一些直接内存空间。

    摄入任务也需要合并部分摄入结果,这个过程也需要直接内存空间。

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

    (druid.processing.numThreads + druid.processing.numMergeBuffers +1)* druid.processing.buffer.sizeBytes

    +1 因子是一个模糊估计,用于解释segment解压缓冲区和字典合并缓冲区。

    Connection pool sizeing(连接池大小)

    druid.server.http.numThreads 应该稍微高于 集群中所有Brokers设置的druid.broker.http.numConnections之和。

    每个任务能够接收50个查询和10个非查询是一个合理的开端。

    Total memory usage(总内存使用量)

    按照下面的指引来预估任务的总内存使用量:

    Heap: 1GB + (2 * total size of lookup maps)

    Direct Memory:(druid.processing.numThreads + druid.processing.numMergeBuffers + 1)* druid.processing.buffer.sizeBytes

    (MiddleManger + Tasks) 总的内存使用量:

    MM heap size + druid.worker.capacity * (single task memory usage)

    Configuration guidelines for specific ingestion types(对于具体的摄入类型的配置指引)

    Kafka/Kinesis ingestion

    如果使用 Kafka Indexing Service 或者 Kinesis Indexing Service,所需任务的数量将取决于分区的数量和taskCount/replica的设置。

    除了这些要求外,在集群中分配较多的任务槽是一个好主意,这样就可以为其他任务(如压缩任务)提供空闲的任务槽。

    Hadoop ingestion

    如果仅使用 hadoop批量摄入,则可以降低为每个任务分配的资源数量。批量摄入任务不需要应答查询,且摄入工作由hadoop 集群执行,因此任务不需要较多的资源。

    Parallel native ingesion

    如果使用 parallel native batch ingestion,分配较多可用的任务槽是一个好主意,并且这将允许更大的摄取并发。

    相关文章

      网友评论

        本文标题:Druid调优指南(三)- MiddleManager

        本文链接:https://www.haomeiwen.com/subject/rnyigctx.html