Druid--Druid中Indexer Process

  • 基于apache-druid-0.17
  • Attention:Indexer是一個(gè)可選的實(shí)驗(yàn)性特性。它的內(nèi)存管理系統(tǒng)仍在開(kāi)發(fā)中,并將在以后的版本中得到顯著增強(qiáng)。
  • Apache Druid Indexer進(jìn)程是 MiddleManager + Peon任務(wù)執(zhí)行系統(tǒng)的替代方案。Indexer不是為每個(gè)任務(wù)創(chuàng)建單獨(dú)的JVM進(jìn)程,而是在單個(gè)JVM進(jìn)程中作為單獨(dú)的線程運(yùn)行任務(wù)。
  • 與MiddleManager + Peon系統(tǒng)相比,Indexer設(shè)計(jì)得更易于配置和部署,并更好地支持任務(wù)間的資源共享。
  • 配置文件和api接口詳見(jiàn)官方文檔。

啟動(dòng)命令

org.apache.druid.cli.Main server indexer

task資源共享

  • 以下資源在Indexer進(jìn)程中運(yùn)行的所有任務(wù)之間共享。

Query資源

  • 查詢處理線程和緩沖區(qū)在所有任務(wù)之間共享。Indexer將為所有任務(wù)共享的單個(gè)端點(diǎn)提供查詢。
  • 如果啟用了查詢緩存,那么還可以在所有任務(wù)之間共享查詢緩存。

服務(wù)器的HTTP線程

  • Indexer維護(hù)兩個(gè)大小相等的HTTP線程池。
  • 一個(gè)線程池專門用于Overlord和Indexer之間的任務(wù)控制消息(“chat handler threads”)。另一個(gè)池用于處理所有其他HTTP請(qǐng)求。
  • 池的大小由druid.server.http.numThreads配置。numThreads配置(例如,如果將其設(shè)置為10,則將有10個(gè)聊天處理程序線程和10個(gè)非聊天處理程序線程)。
  • 除了這兩個(gè)池之外,還為查找處理分配了兩個(gè)單獨(dú)的線程。如果不使用查找,就不會(huì)使用這些線程。

內(nèi)存共享

  • Indexer使用配置druid.worker.globalIngestionHeapLimitBytes對(duì)所運(yùn)行的任務(wù)加全局堆限制。
  • 這個(gè)全局限制是由druid.worker.capacity配置的任務(wù)槽的數(shù)量平均分配的。
  • 要應(yīng)用每個(gè)任務(wù)堆(heap)的限制,Indexer將在任務(wù)調(diào)優(yōu)配置中覆蓋maxBytesInMemory(即,忽略默認(rèn)值或任何用戶配置的值)。maxRowsInMemory也將被覆蓋到一個(gè)實(shí)質(zhì)上不受限制的值:索引器不支持行限制。
  • 默認(rèn)情況下:druid.worker.globalIngestionHeapLimitBytes設(shè)定為JVM堆內(nèi)存的1/6;選擇此默認(rèn)值是為了在使用MiddleManager/Peon系統(tǒng)(也占JVM堆的1/6)時(shí),與任務(wù)調(diào)優(yōu)配置中的maxBytesInMemory的默認(rèn)值保持一致。
  • 堆內(nèi)存中保存的原始數(shù)據(jù)的峰值使用量與任務(wù)調(diào)優(yōu)配置中的maxBytesInMemorymaxpendingpersist屬性之間的交互有關(guān)。當(dāng)任務(wù)在堆中保存的原始數(shù)據(jù)量達(dá)到maxBytesInMemory指定的限制時(shí),任務(wù)將持久化堆中的行數(shù)據(jù)。在persist啟動(dòng)后,任務(wù)可以在運(yùn)行persist時(shí)再次讀取maxBytesInMemory字節(jié)數(shù)的原始數(shù)據(jù)。
  • 這意味著,原始數(shù)據(jù)的堆內(nèi)峰值使用量可以達(dá)到maxBytesInMemory * (2 + maxpendingpersist)。maxpendingpersist的默認(rèn)值是0,這允許一個(gè)persist與數(shù)據(jù)提取工作并發(fā)運(yùn)行。
  • 堆的其余部分用于查詢處理和段持久化/合并操作,以及其他堆的使用。

并發(fā)Segment緩存和合并限制

  • 為了幫助降低峰值內(nèi)存使用量,Indexer對(duì)所有運(yùn)行任務(wù)的并發(fā)Segment
    perstis/merge 操作的數(shù)量施加了限制。
  • 默認(rèn)情況下,并發(fā)Segment的 perstis/merge 操作的數(shù)量限制為(druid.worker.capacity / 2),四舍五入。參數(shù)配置druid.worker.numConcurrentMerges。

當(dāng)前限制

  • 使用Indexer時(shí),當(dāng)前不支持單獨(dú)的任務(wù)日志;所有任務(wù)日志消息都將記錄在Indexer進(jìn)程日志中。
  • Indexer當(dāng)前對(duì)每個(gè)任務(wù)施加相同的內(nèi)存限制。在以后的版本中,將刪除每個(gè)任務(wù)的內(nèi)存限制,只應(yīng)用全局限制。并發(fā)合并的限制也將被取消。
  • 在以后的版本中,每個(gè)任務(wù)的內(nèi)存使用將被動(dòng)態(tài)管理。詳見(jiàn):https://github.com/apache/druid/issues/7900
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容