【翻譯自https://druid.apache.org/docs/latest/operations/basic-cluster-tuning.html】
Broker
Heap sizing(堆大小調(diào)整)
Broker上的堆主要使用集中在:
來自歷史節(jié)點(diǎn)以及Tasks(一般值peons)未合并的查詢
segment時(shí)間線:包括當(dāng)前所有可用的segments的位置信息(哪個(gè)歷史節(jié)點(diǎn)或者task正在提供segment查詢服務(wù))
緩存segment元數(shù)據(jù):包括當(dāng)前所有可用的segments元數(shù)據(jù)(如每個(gè)segment的schema信息)
Broker堆 基于集群中segment的數(shù)量以及segments的總數(shù)據(jù)大小進(jìn)行擴(kuò)展。
堆大小 將基于數(shù)據(jù)大小和使用模式有所不同,但4G到8G是中小集群(大約15臺(tái)服務(wù)器或者更?。┑牧己闷瘘c(diǎn)。
對(duì)內(nèi)存需求粗略估計(jì),節(jié)點(diǎn)數(shù)約為100個(gè)節(jié)點(diǎn)的超大集群需要broker堆的大小為30G~60G
如果使Broker中的緩存生效,緩存存儲(chǔ)在堆中,大小由 druid.cache.sizeInBytes 設(shè)置。
Direct memory sizing(直接內(nèi)存大小調(diào)整)
在Broker中,所需的直接內(nèi)存數(shù)量取決于配置了多少合并緩沖區(qū)(用于合并GroupBy)。Broker通常不需要處理線程或處理緩沖區(qū),因?yàn)椴樵兘Y(jié)果是在http連接線程的堆上合并的。
druid.processing.buffer.sizeBytes: 可以設(shè)置為500M
druid.processing.numThreads:設(shè)置為 1 (所允許的最小值)
druid.processing.numMergeBuffers:與歷史節(jié)點(diǎn)設(shè)置為相同的值 或者略高一點(diǎn)
Note on the deprecated? chunkPeriod
Broker 不需要處理線程和處理緩沖區(qū)? 有一個(gè)例外:
如果在 query context 設(shè)置了已棄用的 chunkPeriod 屬性,GroupBy V1 查詢將會(huì)使用處理線程和處理緩沖區(qū)。
chunkPeriod 和 GroupBy V1(代替用GroupBy V2)目前已被棄用,將來將會(huì)被移除,不推薦再使用。chunkPeriod特性的存在也解釋了為什么要配置處理線程最小為1,盡管未被使用。
Connection pool sizing (連接池大小調(diào)整)
需要確保所有Brokers中 druid.broker.http.numConnections 的總和 略低于 歷史節(jié)點(diǎn)和Tasks中設(shè)置的 druid.server.http.numThreads值。
在同一個(gè)Broker節(jié)點(diǎn),druid.server.http.numThreads 應(yīng)該略高于 druid.broker.http.numConnections。
使得每個(gè)歷史節(jié)點(diǎn)可以接受50個(gè)查詢和10個(gè)非查詢,進(jìn)而相應(yīng)的調(diào)整Broker是一個(gè)合理的集群調(diào)優(yōu)的開端。
Broker backpress(Broker 反向施壓)
當(dāng)從歷史節(jié)點(diǎn)和Tasks提取查詢結(jié)果時(shí),Broker能夠選擇性的指定隊(duì)列以及未讀數(shù)據(jù)的最大緩沖區(qū)大小,并且在達(dá)到上限時(shí),對(duì)歷史節(jié)點(diǎn)和Tasks的通道施加反壓力(導(dǎo)致在歷史節(jié)點(diǎn)/Task端阻塞對(duì)通道的寫入,直到Broker能夠從通道中消耗一些數(shù)據(jù))
緩沖區(qū)大小通過 druid.broker.http.maxQueueBytes來設(shè)置
這個(gè)大小限制被查詢命中的歷史節(jié)點(diǎn)/Tasks的數(shù)量分?jǐn)偅杭偃缭O(shè)置 druid.broker.http.maxQueuedBytes 為5MB,Broke收到一個(gè)查詢,該查詢需要分?jǐn)偟?個(gè)歷史節(jié)點(diǎn),每個(gè)歷史節(jié)點(diǎn)通道將得到2.5MB的緩沖區(qū)。
通常將該值設(shè)置為 2MB * number of Historicals。
當(dāng)集群規(guī)模隨著歷史節(jié)點(diǎn)和Tasks增多而擴(kuò)展時(shí),需要相應(yīng)的增加緩沖區(qū)大小和Broker堆大小。
如果緩沖區(qū)太小,會(huì)因?yàn)榫彌_區(qū)快速填滿并拖住通道而使得查詢效率低下
如果緩沖區(qū)太大,會(huì)因?yàn)閔ttp通道中有較多的排隊(duì)結(jié)果數(shù)據(jù)而使得Broker有較大的內(nèi)存壓力
Number of brokers
Broker 與歷史節(jié)點(diǎn)的比率設(shè)置為1:15 是一個(gè)合理的開端。
如果需要Broker HA,需要先部署2個(gè)Broker,然后用1:15的比率來添加額外的Brokers
Total memory usage
按照下面的指導(dǎo)估計(jì)Broker總的內(nèi)存使用量:
Heap: 分配的堆大小
Direct Memory:(druid.processing.numThreads + druid.processing.numMergeBuffers + 1) * druid.processing.buffer.sizeBytes