天天看點

Apache Doris:基于MPP架構的實時分析資料庫,是時候上手了

作者:迷路的架構師

Apache Doris 是一個基于 MPP 架構的高性能實時分析資料庫,以極速和易用性著稱。海量資料下僅需亞秒級響應時間即可傳回查詢結果,不僅可以支援高并發點查詢場景,還可以支援高吞吐量的複雜分析場景。基于此,Apache Doris可以更好的滿足報表分析、即席查詢、統一數倉、資料湖查詢加速等場景,使用者可以建構使用者行為分析、AB測試平台、日志檢索分析、使用者畫像分析、訂單分析,以及在此之上的其他應用程式。

Apache Doris最早誕生于百度廣告報表業務的Palo項目,2017年正式開源,2018年7月由百度捐贈給Apache基金會孵化,在Apache導師的指導下,由孵化器項目管理委員會成員進行孵化和營運。Apache Doris 順利畢業于 Apache 孵化器,并于 2022 年 6 月成為頂級項目。目前,Apache Doris 社群聚集了來自不同行業近百家公司的 300 多名貢獻者,活躍貢獻者人數接近 100 人/月。

Apache Doris 目前在中國乃至全球擁有廣泛的使用者群,截至今天,Apache Doris 已在全球超過 500 家公司的生産環境中使用。中國網際網路市值或估值前50強企業中,80%以上長期使用Apache Doris百度、美團、小米、京東、位元組跳動、騰訊、網易、快手、微網誌等。它還廣泛應用于金融、能源、制造、電信等一些傳統行業。

使用場景

如下圖所示,經過各種資料整合和處理後,資料源通常存儲在實時數倉Doris和離線資料湖或數倉(Apache Hive、Apache Iceberg或Apache Hudi中)。

Apache Doris:基于MPP架構的實時分析資料庫,是時候上手了

使用場景

Apache Doris 廣泛應用于以下場景:

報告分析

  • 實時儀表闆
  • 生成内部分析師和經理的報告
  • 面向使用者或客戶的高并發報表分析:比如網站主 做站點分析,廣告主 做廣告報表等場景,并發通常需要上千QPS,查詢時延需要亞秒級響應。著名電商京東在廣告報表中使用Doris,每天寫入100億行資料,上萬并發查詢QPS,99%查詢延遲150ms。

即席查詢

面向分析師的具有不規則查詢模式和高吞吐量要求的的自助服務分析。小米基于Doris建構了增長分析平台(Growth Analytics,GA),利用使用者行為資料進行業務增長分析,平均查詢延遲10秒,95%查詢延遲30秒以下,數萬每天的 SQL 查詢數。

統一資料倉庫建設

Doris 是一個滿足統一資料倉庫建設需求,簡化複雜資料軟體棧的平台。海底撈基于Doris的統一資料倉庫取代了由Apache Spark、Apache Hive、Apache Kudu、Apache HBase、Apache Phoenix組成的舊架構,大大簡化了架構。

資料湖查詢

通過使用外部表聯合位于 Apache Hive、Apache Iceberg 和 Apache Hudi 中的資料,在避免資料複制的同時大大提高了查詢性能。

技術概覽

Apache Doris 的整體架構如下圖所示。Doris 架構非常簡單,隻有兩類程序。

  • Frontend(FE):主要負責使用者請求接入、查詢解析和規劃、中繼資料管理、節點管理等相關工作。
  • 後端(BE):主要負責資料存儲和查詢計劃執行。

兩種類型的程序都可以水準擴充,單個叢集最多可以支援數百台機器和數十 PB 的存儲容量。并且這兩類流程通過一緻性協定保證了服務的高可用性和資料的高可靠性。這種高度內建的架構設計大大降低了分布式系統的運維成本。

Apache Doris:基于MPP架構的實時分析資料庫,是時候上手了

Apache Doris 的架構

Doris采用MySQL協定,高度相容MySQL方言,支援标準SQL。使用者可以通過各種用戶端工具通路Doris,支援與BI工具無縫對接。

在存儲引擎方面,Doris采用列式存儲對資料進行按列編碼壓縮和讀取,在實作極高壓縮率的同時減少大量掃描無關資料,進而更高效地利用IO和CPU資源.

Doris 還支援比較豐富的索引結構來減少資料掃描:

  • 支援排序複合鍵索引:最多可以指定三列組成複合排序鍵。有了這個索引,可以對資料進行有效的剪枝,更好的支援高并發的上報場景。
  • Z-order 索引:使用Z-order 索引,您可以高效地對架構中的任意字段組合運作範圍查詢。
  • MIN/MAX 索引:有效過濾數字類型的等價和範圍查詢
  • 布隆過濾器:對高基數列的等價過濾和修剪非常有效
  • 反向索引:它可以快速搜尋任何字段

在存儲模型方面,Doris 支援多種存儲模型,針對不同場景有針對性的優化:

  • 聚合鍵模型:通過預先聚合來合并具有相同鍵的值列,以顯着提高性能。
  • 唯一鍵模型:鍵是唯一的。具有相同鍵的資料将被覆寫,以實作行級資料更新。
  • 重複鍵模型:詳細的資料模型,可以滿足事實表的詳細存儲。

Doris 還支援強一緻性物化視圖,物化視圖的更新和選擇在系統内部自動完成,不需要使用者手動選擇,進而顯着降低了物化視圖的維護成本。

在查詢引擎方面,Doris采用了MPP模型,節點間和節點内并行執行,也支援多張大表的分布式shuffle join,可以更好的應對複雜的查詢。

Apache Doris:基于MPP架構的實時分析資料庫,是時候上手了

Apache Doris 的查詢引擎

Doris查詢引擎是向量化的,所有記憶體結構都可以以列格式布局,進而實作顯著減少虛拟函數調用、提高緩存命中率和高效使用SIMD指令。寬表聚合場景中的性能比非向量化引擎高 5-10 倍。

Apache Doris:基于MPP架構的實時分析資料庫,是時候上手了

向量化查詢執行器

Doris使用自适應查詢執行技術,可以根據運作時的統計動态調整執行計劃,例如運作時過濾器技術,在運作時生成過濾器推送到探測端,并自動将過濾器穿透到探測端,大大減少了探測端的資料量,提高了連接配接性能。Doris 的運作時過濾器支援 In/Min/Max/Bloom 過濾器。

查詢優化器

在優化器方面,Doris 使用了 CBO 和 RBO 的組合,RBO 支援常量折疊、子查詢重寫、謂詞下推等,CBO支援 Join 重新排序。CBO仍在持續優化中,主要集中在更準确的統計資訊收集和推導、更準确的成本模型預測等方面。

未來,Apache Doris除了資料分析之外,還将提升資料工程能力,更好地覆寫企業資料ETL/ELT場景,通過一個平台滿足多種混合工作負載。另一方面,對雲基礎設施做深度優化,利用雲提供的彈性和新硬體,提供成本效益更好的産品。

為什麼選擇 Apache Doris?

  • 易于使用:兩個程序,沒有其他依賴;線上叢集伸縮,自動副本恢複;相容MySQL協定,使用标準SQL。
  • 高性能:通過列式存儲引擎、現代 MPP 架構、矢量化查詢引擎、預聚合物化視圖和資料索引,為低延遲和高吞吐量查詢提供極快的性能。
  • 單一統一:單一系統可以支援實時資料服務、互動式資料分析和離線資料處理場景。
  • 聯邦查詢:支援Hive、Iceberg、Hudi等資料湖和MySQL、Elasticsearch等資料庫的聯邦查詢。
  • 多種資料導入方式:支援從HDFS/S3批量導入,從MySQL Binlog/Kafka流式導入;支援通過HTTP接口進行微批量寫入,也支援在JDBC中使用Insert實時寫入。
  • 豐富生态: Spark使用Spark-Doris-Connector讀寫Doris;Flink-Doris-Connector 使 Flink CDC 能夠實作 Exactly-once 資料寫入 Doris;提供 DBT Doris Adapter 用于将 Doris 中的資料與 DBT 進行轉換。