今天小編給大家分享的是Apache中Druid多進(jìn)程架構(gòu)的詳細(xì)介紹,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說,一起往下看吧。
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比晉州網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式晉州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋晉州地區(qū)。費(fèi)用合理售后完善,十余年實體公司更值得信賴。Druid 是多進(jìn)程架構(gòu),每種進(jìn)程類型都可以獨立配置,獨立擴(kuò)展。這樣可以為集群提供大的靈活度。這種設(shè)計還提供了強(qiáng)失效容忍:一個失效的組件不會立即影響另外的組件。
下面我們來深入了解 Druid 有哪些進(jìn)程類型,每種進(jìn)程又在整個集群中扮演什么角色。
Druid 有多種進(jìn)程類型,如下:
你可以以任何方式來部署上面的進(jìn)程。但是為了易于運(yùn)維,官方建議以下面三種服務(wù)類型來組織進(jìn)程:Master、Query 和 Data。
除了內(nèi)置的進(jìn)程類型,Druid 還有三個外部依賴項。
共享文件存儲,只要配置成允許 Druid 訪問即可。在集群部署中,通常使用分布式存儲(如 S3 或 HDFS)或掛載網(wǎng)絡(luò)文件系統(tǒng)。在單機(jī)部署中,通常使用本地磁盤。Druid 使用 Deep Storage 存儲寫入集群的數(shù)據(jù)。
Druid 僅將 Deep Storage 用作數(shù)據(jù)的備份,并作為 Druid進(jìn)程間在后臺的數(shù)據(jù)傳輸方式。要響應(yīng)查詢,Historical 進(jìn)程并不從 Deep Storage 上讀取數(shù)據(jù),在任何查詢之前,先從本地磁盤查詢已經(jīng)存在的數(shù)據(jù)。這意味著,Druid 在查詢時并不需要訪問 Deep Storage,這樣就可以得到最優(yōu)的查詢延遲。這也意味著,在 Deep Storage 和 Historical 進(jìn)程間你必須有足夠的磁盤空間來存儲你計劃加載的數(shù)據(jù)。
Deep Storage 是 Druid 彈性、容錯設(shè)計的重要組成部分。如果 Druid 單機(jī)進(jìn)程本地數(shù)據(jù)丟失,可以從 Deep Storage 恢復(fù)數(shù)據(jù)。
元數(shù)據(jù)存儲,存儲各種共享的系統(tǒng)元數(shù)據(jù),如 segment 可用性信息和 task 信息。在集群部署中,通常使用傳統(tǒng)的 RDBMS,如 PostgreSQL 或 MySQL。在單機(jī)部署中,通常使用本地存儲,如 Apache Derby 數(shù)據(jù)庫。
用來進(jìn)行內(nèi)部服務(wù)發(fā)現(xiàn),協(xié)調(diào),和主選舉。
下圖可以看出使用官方建議的 Master/Query/Data 服務(wù)部署方式,查詢和寫入數(shù)據(jù)是如何進(jìn)行的:
Druid 數(shù)據(jù)存儲在"datasources"中,它就像 RDBMS 中的 table。每一個 datasources 通過時間分區(qū),或通過其他屬性進(jìn)行分區(qū)。每一個時間范圍稱之為"chunk"(比如,一天一個,如果你的 datasource 使用 day 分區(qū))。在 chunk 中,數(shù)據(jù)被分區(qū)進(jìn)一個或多個"segments"中。每一個 segment 是一個單獨的文件,通常包含數(shù)百萬行數(shù)據(jù)。一旦 segment 被存儲進(jìn) chunks,其組織方式將如以下時間線所示:
一個 datasource 也許只有一個,也可能有數(shù)十萬甚至上百萬個 segment。每個 segment 生命周期開始于 MiddleManager 創(chuàng)建時,剛被創(chuàng)建時,segment 是可變和未提交的。segment 構(gòu)建過程包含以下幾步,旨在生成結(jié)構(gòu)緊湊并支持快速查詢的數(shù)據(jù)文件。
segment 定時提交和發(fā)布。此時,數(shù)據(jù)被寫入 Deep Storage,并且再不可變,并從 MiddleManagers 進(jìn)程遷移至 Historical 進(jìn)程中。一個關(guān)于 segment 的 entry 將寫入 metadata storage。這個 entry 是關(guān)于 segment 的元數(shù)據(jù)的自描述信息,包含如 segment 的數(shù)據(jù)模式,大小,Deep Storage 地址等信息。這些信息讓 Coordinator 知道集群中哪些數(shù)據(jù)是可用的。
indexing 是每個 segment 創(chuàng)建的機(jī)制。handoff 是數(shù)據(jù)被發(fā)布并開始可以被 Historical 進(jìn)程處理的機(jī)制。這機(jī)制在 indexing 側(cè)的工作順序如下:
這機(jī)制在 Coordinator/Historical 側(cè)的工作如下:
數(shù)據(jù)寫入(indexing)和移交(handoff):
Segment 標(biāo)識由下面四部分組成:
segmentGranularity
指定參數(shù))。例如,這是 datasource 為clarity-cloud0
,時間段為2018-05-21T16:00:00.000Z/2018-05-21T17:00:00.000Z
,版本號為2018-05-21T15:56:09.909Z
,分區(qū)號為 1 的標(biāo)識符:
clarity-cloud0_2018-05-21T16:00:00.000Z_2018-05-21T17:00:00.000Z_2018-05-21T15:56:09.909Z_1
分區(qū)號為 0(塊中的第一個分區(qū))的 segment 省略了分區(qū)號,如以下示例所示,它是與前一個分區(qū)在同一時間塊中的 segment,但分區(qū)號為 0 而不是 1:
clarity-cloud0_2018-05-21T16:00:00.000Z_2018-05-21T17:00:00.000Z_2018-05-21T15:56:09.909Z
你可能想知道上一節(jié)中描述的“版本號”是什么。
Druid 支持批處理模式覆寫。在 Driud 中,如果你要做的只是追加數(shù)據(jù),那么每個時間塊只有一個版本。但是,當(dāng)你覆蓋數(shù)據(jù)時,在幕后發(fā)生的事情是使用相同的數(shù)據(jù)源,相同的時間間隔,但版本號更高的方式創(chuàng)建了一組新的 segment。這向 Druid 系統(tǒng)的其余部分發(fā)出信號,表明應(yīng)從群集中刪除較舊的版本,而應(yīng)使用新版本替換它。
對于用戶而言,切換似乎是瞬間發(fā)生的,因為 Druid 通過先加載新數(shù)據(jù)(但不允許對其進(jìn)行查詢)來處理此問題,然后在所有新數(shù)據(jù)加載完畢后,立即將新查詢切換到新 segment。然后,它在幾分鐘后刪除舊 segment。
每個 segment 的生命周期都涉及以下三個主要領(lǐng)域:
元數(shù)據(jù)存儲區(qū)
中。將 segmnet 的記錄插入元數(shù)據(jù)存儲的操作稱為發(fā)布。然后將元數(shù)據(jù)中的use
布爾值設(shè)置成可用
。由實時任務(wù)創(chuàng)建的 segment 將在發(fā)布之前可用,因為它們僅在 segment 完成時才發(fā)布,并且不接受任何其他數(shù)據(jù)。你可以使用 Druid SQL sys.segments
表檢查當(dāng)前 segment 的狀態(tài) 。它包括以下標(biāo)志:
is_published
:如果 segment 元數(shù)據(jù)已發(fā)布到存儲的元數(shù)據(jù)中,used
則為 true,此值也為 true。is_available
:如果該 segment 當(dāng)前可用于實時任務(wù)或Historical查詢,則為 True。is_realtime
:如果 segment 在實時任務(wù)上可用,則為 true 。對于使用實時寫入的數(shù)據(jù)源,通常會先設(shè)置成true
,然后隨著 segment 的發(fā)布和移交而變成false
。is_overshadowed
:如果該 segment 已發(fā)布(used
設(shè)置為 true)并且被其他一些已發(fā)布的 segment 完全覆蓋,則為 true。通常,這是一個過渡狀態(tài),處于此狀態(tài)的 segment 很快就會將其used
標(biāo)志自動設(shè)置為 false。查詢首先進(jìn)入Broker
進(jìn)程,Broker
將得出哪些 segment 具有與該查詢有關(guān)的數(shù)據(jù)(segment 列表始終按時間規(guī)劃,也可以根據(jù)其他屬性來規(guī)劃,這取決于數(shù)據(jù)源的分區(qū)方式),然后,Broker
將確定哪些 Historical
和 MiddleManager
正在為這些 segment 提供服務(wù),并將重寫的子查詢發(fā)送給每個進(jìn)程。Historical
/ MiddleManager
進(jìn)程將接受查詢,對其進(jìn)行處理并返回結(jié)果。Broker
接收結(jié)果并將它們合并在一起以得到最終答案,并將其返回給客戶端。
Broker
會分析每個請求,優(yōu)化查詢,盡可能的減少每個查詢必須掃描的數(shù)據(jù)量。相比于 Broker 過濾器做的優(yōu)化,每個 segment 內(nèi)的索引結(jié)構(gòu)允許 Druid 在查看任何數(shù)據(jù)行之前先找出哪些行(如果有)與過濾器集匹配。一旦 Druid 知道哪些行與特定查詢匹配,它就只會訪問該查詢所需的特定列。在這些列中,Druid 可以在行與行之間跳過,從而避免讀取與查詢過濾器不匹配的數(shù)據(jù)。
因此,Druid 使用三種不同的技術(shù)來優(yōu)化查詢性能:
檢索每個查詢需訪問的 segment。
在每個 segment 中,使用索引來標(biāo)識查詢的行。
關(guān)于Apache中Druid多進(jìn)程架構(gòu)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。