【翻譯自https://druid.apache.org/docs/latest/operations/basic-cluster-tuning.html】
MiddleManager是一個輕量級的任務(wù)控制器/管理器酸钦,用于啟動任務(wù)進(jìn)程,執(zhí)行攝入任務(wù)。
MiddleManager heap sizing(堆大小調(diào)整)
MiddleManager節(jié)點(diǎn)本身不需要較多的資源厚骗,通常設(shè)置 ~128M即可战转。
SSD storage
MiddleManager中的存儲推薦使用SSDs茅姜,因?yàn)镸iddlerManager啟動的任務(wù)需要處理存儲在磁盤中的segment數(shù)據(jù)奏夫。
Task Count
MiddleManager中能夠啟動的tasks的數(shù)量根據(jù) druid.worker.capacity 來設(shè)置桩匪。
所需worker的數(shù)量依賴需要運(yùn)行多少并發(fā)的攝入任務(wù)打瘪。在給定的機(jī)器上能夠啟動的worker的數(shù)量取決于每個worker分配的資源大小和可用的系統(tǒng)資源。
可以通過部署較多的MiddleManager機(jī)器來增加任務(wù)的容量傻昙。
Task configurations
下面的部分描述由MiddleManager啟動的任務(wù)的配置闺骚。任務(wù)能被查詢和執(zhí)行攝入工作,因此相對于MM需要較多的資源妆档。
Task heap sizing
對于Tasks僻爽,設(shè)置堆為1GB是足夠的。
Lookups
Task processing threads and buffers(處理線程和緩存)
通常來說贾惦,處理線程設(shè)置為1或者2是足夠的胸梆,因?yàn)橄鄬τ跉v史節(jié)點(diǎn),任務(wù)持有較少的可查詢數(shù)據(jù)须板。
druid.indexer.fork.property.druid.processing.numThreads:設(shè)置為 1 或者 2
druid.indexer.fork.property.druid.processing.numMergeBuffers: 設(shè)置為 2
druid.indexer.fork.property.druid.processing.buffer.sizeBytes:可以設(shè)置為 100MB
Direct memory sizing (直接內(nèi)存大信鼍怠)
上面描述的處理和合并緩沖區(qū)是直接內(nèi)存緩沖區(qū)。
當(dāng)任務(wù)處理查詢時习瑰,必須要打開一組segments進(jìn)行讀取绪颖。這個過程需要一些直接內(nèi)存空間。
攝入任務(wù)也需要合并部分?jǐn)z入結(jié)果甜奄,這個過程也需要直接內(nèi)存空間柠横。
預(yù)估直接內(nèi)存使用的公式如下:
(druid.processing.numThreads + druid.processing.numMergeBuffers +1)* druid.processing.buffer.sizeBytes
+1 因子是一個模糊估計,用于解釋segment解壓緩沖區(qū)和字典合并緩沖區(qū)贺嫂。
Connection pool sizeing(連接池大凶茵)
druid.server.http.numThreads 應(yīng)該稍微高于 集群中所有Brokers設(shè)置的druid.broker.http.numConnections之和雁乡。
每個任務(wù)能夠接收50個查詢和10個非查詢是一個合理的開端第喳。
Total memory usage(總內(nèi)存使用量)
按照下面的指引來預(yù)估任務(wù)的總內(nèi)存使用量:
Heap: 1GB + (2 * total size of lookup maps)
Direct Memory:(druid.processing.numThreads + druid.processing.numMergeBuffers + 1)* druid.processing.buffer.sizeBytes
(MiddleManger + Tasks) 總的內(nèi)存使用量:
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,所需任務(wù)的數(shù)量將取決于分區(qū)的數(shù)量和taskCount/replica的設(shè)置踱稍。
除了這些要求外曲饱,在集群中分配較多的任務(wù)槽是一個好主意悠抹,這樣就可以為其他任務(wù)(如壓縮任務(wù))提供空閑的任務(wù)槽。
Hadoop ingestion
如果僅使用 hadoop批量攝入扩淀,則可以降低為每個任務(wù)分配的資源數(shù)量楔敌。批量攝入任務(wù)不需要應(yīng)答查詢,且攝入工作由hadoop 集群執(zhí)行驻谆,因此任務(wù)不需要較多的資源卵凑。
Parallel native ingesion
如果使用 parallel native batch ingestion,分配較多可用的任務(wù)槽是一個好主意胜臊,并且這將允許更大的攝取并發(fā)勺卢。