天天看點

分布式列式資料存儲系統Druid

Druid是一個用于大資料實時查詢與分析的分布式列式資料存儲系統。為了應對海量資料的實時查詢和多元分析,Druid應運而生。 Druid誕生于MetaMarkets公司,而網際網路廣告分析正是MetaMarkets最重要的業務之一,基于同樣的業務需求背景,微網誌廣告也開始嘗試将 Druid 作為監控平台後端資料引擎的技術方案之一。

一、Druid特性

Druid的特性如下:

  • 支援部分嵌套資料結構的列式存儲。
  • 進行剪枝的分布式層級查詢。
  • 通過索引快速過濾。
  • 資料的實時攝入和查詢。 容
  • 錯分布式架構確定資料不丢失。
  • 水準擴充。

二、Druid架構

1、Druid節點組成

Druid 是一個分布式系統,由多個角色的節點組合而成,每個節點都隻關心自己的工作。Druid架構示意圖如下。

分布式列式資料存儲系統Druid
  • 實時節點:實時節點提供實時的索引服務,通過這些節點索引的資料可以立即用于查詢。實時節點将在一定時間内收集到的資料生成一個 Segment 資料檔案,并将這個Segment資料檔案發送到曆史節點中。通過ZooKeeper監控傳輸和中繼資料庫來存儲被發送的 Segment 資料檔案的中繼資料。發送完成後,實時節點就會丢棄被發送的 Segment資料檔案。
  • 曆史節點:存儲和查詢曆史資料。曆史節點不與其他節點直接通信,而是通過與ZooKeeper保持一個長連接配接,實時觀察指定路徑下的新Segment資料檔案資訊。當曆史節點注意到 ZooKeeper 指定隊列路徑下有一個條目時,首先它會檢查本地緩存中是否存在該Segment資料檔案的元資訊,如果本地緩存中不存在新Segment資料檔案的元資訊,那麼曆史節點将從ZooKeeper中讀取新Segment資料檔案的元資訊到本地,并根據下載下傳到本地的Segment資料檔案的元資訊去Deep Storage中拉取Segment資料檔案。最後,曆史節點會通過ZooKeeper向叢集宣布,它将提供該Segment資料檔案的查詢服務。
  • 協調節點:主要負責Segment資料檔案的加載、删除,管理Segment資料檔案副本和平衡各曆史節點的Segment資料檔案。協調節點根據配置檔案中指定的參數定期運作,每次運作,它都會監測叢集狀态,并采取相關的動作。協調節點通過 ZooKeeper 來擷取叢集資訊,同時還會保持與存儲可用段表和規則表的資料庫的連接配接。協調節點不會直接與曆史節點通信,它會根據規則、容量等資訊指定曆史節點,并在 ZooKeeper 中該曆史節點的隊列路徑下生成關于 Segment 資料檔案的臨時資訊。曆史節點看到這些臨時資訊,就會去拉取Segment資料檔案。
  • 代理節點:接收用戶端的查詢請求,并路由請求到實時節點或曆史節點。代理節點通過ZooKeeper知道每個Segment資料檔案存在于哪個節點上。代理節點還用于聚合每個節點傳回的結果,再将聚合後的結果集傳回給用戶端。代理節點還可以通過配置緩存來存儲曆史節點查詢的結果,提高了相同查詢的效率。
  • 索引服務節點:索引服務是一個高可用的分布式服務,運作與索引相關的任務。索引服務是一個主/從架構。索引服務由三個元件組成,即運作一個任務的peon元件、管理peon的Middle Manager元件和管理任務配置設定給Middle Manager的Overlord元件。其中Middle Manager和peon元件必須在同一個節點上。
2、外部依賴
  1. ZooKeeper叢集:用于叢集服務的發現和目前資料拓撲的維護。
  2. Metadata Storage:用于存儲資料檔案的中繼資料,但是不存儲實際的資料。可以使用MySQL或者PostgreSQL作為Metadata Storage。Metadata Storage一般會存儲以下幾個表。
  • Segments Table:Segment資料檔案的元資訊表。
  • Rule Table:Segment資料檔案的存儲規則表。
  • Config Table:配置表,用于存儲運作時的配置對象。
  • Task-related Table:索引服務建立并使用到的表。
  • Audit Table:審計表,用于存儲配置變化的審計曆史記錄。
  1. Deep Storage:用于存儲Segment資料檔案。
3、Segment傳輸過程

Segment傳輸過程如下圖。

分布式列式資料存儲系統Druid
  1. 實時節點将在一定時間内收集到的資料生成一個 Segment 資料檔案,并發送到 Deep Storage,同時将該Segment資料檔案的元資訊發送到中繼資料庫中。
  2. 協調節點從中繼資料庫中擷取新的Segment資料檔案的元資訊,根據規則配置設定該Segment資料檔案存儲的曆史節點,并将中繼資料寫入在ZooKeeper上建立的一個臨時節點中。
  3. 曆史節點從ZooKeeper的臨時節點中讀取中繼資料,去Deep Storage中拉取指定的Segment資料檔案,并删除在ZooKeeper上建立的臨時節點。
4、DataSource
  • Timestamp:存儲名額的UTC時間列,可以精确到毫秒。
  • Dimension:存儲名額的次元列。
  • Metric:名額列,用來聚合計算。
5、Segment

繼續閱讀