Druid调优指南(三)- MiddleManager

【翻译自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)