【翻譯自https://druid.apache.org/docs/latest/operations/basic-cluster-tuning.html】
Broker
Heap sizing(堆大小調整)
Broker上的堆主要使用集中在:
來自歷史節(jié)點以及Tasks(一般值peons)未合并的查詢
segment時間線:包括當前所有可用的segments的位置信息(哪個歷史節(jié)點或者task正在提供segment查詢服務)
緩存segment元數(shù)據(jù):包括當前所有可用的segments元數(shù)據(jù)(如每個segment的schema信息)
Broker堆 基于集群中segment的數(shù)量以及segments的總數(shù)據(jù)大小進行擴展睡扬。
堆大小 將基于數(shù)據(jù)大小和使用模式有所不同叉存,但4G到8G是中小集群(大約15臺服務器或者更小)的良好起點。
對內存需求粗略估計分扎,節(jié)點數(shù)約為100個節(jié)點的超大集群需要broker堆的大小為30G~60G
如果使Broker中的緩存生效肋层,緩存存儲在堆中洒放,大小由 druid.cache.sizeInBytes 設置。
Direct memory sizing(直接內存大小調整)
在Broker中取劫,所需的直接內存數(shù)量取決于配置了多少合并緩沖區(qū)(用于合并GroupBy)匆笤。Broker通常不需要處理線程或處理緩沖區(qū),因為查詢結果是在http連接線程的堆上合并的勇凭。
druid.processing.buffer.sizeBytes: 可以設置為500M
druid.processing.numThreads:設置為 1 (所允許的最小值)
druid.processing.numMergeBuffers:與歷史節(jié)點設置為相同的值 或者略高一點
Note on the deprecated? chunkPeriod
Broker 不需要處理線程和處理緩沖區(qū)? 有一個例外:
如果在 query context 設置了已棄用的 chunkPeriod 屬性疚膊,GroupBy V1 查詢將會使用處理線程和處理緩沖區(qū)。
chunkPeriod 和 GroupBy V1(代替用GroupBy V2)目前已被棄用虾标,將來將會被移除寓盗,不推薦再使用。chunkPeriod特性的存在也解釋了為什么要配置處理線程最小為1璧函,盡管未被使用傀蚌。
Connection pool sizing (連接池大小調整)
需要確保所有Brokers中 druid.broker.http.numConnections 的總和 略低于 歷史節(jié)點和Tasks中設置的 druid.server.http.numThreads值。
在同一個Broker節(jié)點蘸吓,druid.server.http.numThreads 應該略高于 druid.broker.http.numConnections善炫。
使得每個歷史節(jié)點可以接受50個查詢和10個非查詢,進而相應的調整Broker是一個合理的集群調優(yōu)的開端库继。
Broker backpress(Broker 反向施壓)
當從歷史節(jié)點和Tasks提取查詢結果時箩艺,Broker能夠選擇性的指定隊列以及未讀數(shù)據(jù)的最大緩沖區(qū)大小,并且在達到上限時宪萄,對歷史節(jié)點和Tasks的通道施加反壓力(導致在歷史節(jié)點/Task端阻塞對通道的寫入艺谆,直到Broker能夠從通道中消耗一些數(shù)據(jù))
緩沖區(qū)大小通過 druid.broker.http.maxQueueBytes來設置
這個大小限制被查詢命中的歷史節(jié)點/Tasks的數(shù)量分攤:假如設置 druid.broker.http.maxQueuedBytes 為5MB,Broke收到一個查詢拜英,該查詢需要分攤到2個歷史節(jié)點静汤,每個歷史節(jié)點通道將得到2.5MB的緩沖區(qū)。
通常將該值設置為 2MB * number of Historicals居凶。
當集群規(guī)模隨著歷史節(jié)點和Tasks增多而擴展時虫给,需要相應的增加緩沖區(qū)大小和Broker堆大小。
如果緩沖區(qū)太小侠碧,會因為緩沖區(qū)快速填滿并拖住通道而使得查詢效率低下
如果緩沖區(qū)太大抹估,會因為http通道中有較多的排隊結果數(shù)據(jù)而使得Broker有較大的內存壓力
Number of brokers
Broker 與歷史節(jié)點的比率設置為1:15 是一個合理的開端。
如果需要Broker HA弄兜,需要先部署2個Broker棋蚌,然后用1:15的比率來添加額外的Brokers
Total memory usage
按照下面的指導估計Broker總的內存使用量:
Heap: 分配的堆大小
Direct Memory:(druid.processing.numThreads + druid.processing.numMergeBuffers + 1) * druid.processing.buffer.sizeBytes