Apache Doris——簡介

1.概述

Apache Doris 是一個(gè)基于MPP架構(gòu)的高性能實(shí)時(shí)分析 OLAP 引擎,以其極快的速度和易用性而聞名。

它只需要亞秒的響應(yīng)時(shí)間即可在海量數(shù)據(jù)下返回查詢結(jié)果,并且不僅可以支持高并發(fā)點(diǎn)查詢場景,還可以支持高吞吐量復(fù)雜分析場景。

Apache Doris是一個(gè)現(xiàn)代化的MPP分析型數(shù)據(jù)庫產(chǎn)品。僅需亞秒級(jí)響應(yīng)時(shí)間即可獲得查詢結(jié)果,有效地支持實(shí)時(shí)數(shù)據(jù)分析。Apache Doris的分布式架構(gòu)非常簡潔,易于運(yùn)維,并且可以支持10PB以上的超大數(shù)據(jù)集。

Apache Doris可以滿足多種數(shù)據(jù)分析需求,例如固定歷史報(bào)表,實(shí)時(shí)數(shù)據(jù)分析,交互式數(shù)據(jù)分析和探索式數(shù)據(jù)分析等。令您的數(shù)據(jù)分析工作更加簡單高效!

MPP ( Massively Parallel Processing ),即大規(guī)模并行處理,在數(shù)據(jù)庫非共享集群中,每個(gè)節(jié)點(diǎn)都有獨(dú)立的磁盤存儲(chǔ)系統(tǒng)和內(nèi)存系統(tǒng),業(yè)務(wù)數(shù)據(jù)根據(jù)數(shù)據(jù)庫模型和應(yīng)用特點(diǎn)劃分到各個(gè)節(jié)點(diǎn)上,每臺(tái)數(shù)據(jù)節(jié)點(diǎn)通過專用網(wǎng)絡(luò)或者商業(yè)通用網(wǎng)絡(luò)互相連接,彼此協(xié)同計(jì)算,作為整體提供數(shù)據(jù)庫服務(wù)。非共享數(shù)據(jù)庫集群有完全的可伸縮性、高可用、高性能、優(yōu)秀的性價(jià)比、資源共享等優(yōu)勢。簡單來說,MPP 是將任務(wù)并行的分散到多個(gè)服務(wù)器和節(jié)點(diǎn)上,在每個(gè)節(jié)點(diǎn)上計(jì)算完成后,將各自部分的結(jié)果匯總在一起得到最終的結(jié)果 ( 與 Hadoop 相似 )。

Doris 主要解決 PB 級(jí)別的數(shù)據(jù)量(如果高于 PB 級(jí)別,不推薦使用 Doris 解決,可以考慮用 Hive 等工具),解決結(jié)構(gòu)化數(shù)據(jù),查詢時(shí)間一般在秒級(jí)或毫秒級(jí)。

Doris 由百度大數(shù)據(jù)部研發(fā) ( 之前叫百度 Palo,2018年貢獻(xiàn)到 Apache 社區(qū)后,更名為 Doris ),在百度內(nèi)部,有超過200個(gè)產(chǎn)品線在使用,部署機(jī)器超過1000臺(tái),單一業(yè)務(wù)最大可達(dá)到上百 TB。

百度將 Doris 貢獻(xiàn)給 Apache 社區(qū)之后,許多外部用戶也成為了 Doris 的使用者,例如新浪微博,美團(tuán),小米等著名企業(yè)。

Apache Doris 核心特性:

發(fā)展歷程

2012 年之前,Doris 的定位就是一個(gè) NoSQL 數(shù)據(jù)庫。

2012~2020 年期間,Doris 的定位是 NewSQL,也就是說除了要兼顧存儲(chǔ)海量數(shù)據(jù),也要具備 RDBMS 的 ACID 特性以及對(duì)于 SQL 的支持能力。

2020 年以后,Doris 的定位是 Lakehouse。

關(guān)于 Lakehouse 請(qǐng)參考博客——湖倉一體(Lakehouse)是什么?

2.doris 架構(gòu)

Doris主要整合了Google Mesa(數(shù)據(jù)模型),Apache Impala(MPP Query Engine) 和 Apache ORCFile (存儲(chǔ)格式,編碼和壓縮) 的技術(shù)。

Google Mesa(數(shù)據(jù)模型)

  • Mesa是一種高度可擴(kuò)展的分析數(shù)據(jù)存儲(chǔ)系統(tǒng),用于存儲(chǔ)與Google的互聯(lián)網(wǎng)廣告業(yè)務(wù)有關(guān)的關(guān)鍵測量數(shù)據(jù)。
  • Mesa滿足一系列復(fù)雜且具有挑戰(zhàn)性的用戶和系統(tǒng)需求,包括接近實(shí)時(shí)的數(shù)據(jù)提取和查詢能力,以及針對(duì)大數(shù)據(jù)和查詢量的高可用性,可靠性,容錯(cuò)性和可伸縮性。但是Mesa本身不提供SQL查詢引擎所以借鑒了下面。

Apache Impala(MPP Query Engine)

  • Impala是一個(gè)非常好的MPP SQL查詢引擎,做更多的查詢優(yōu)化,在速度上做到了很好。但是缺少比較完美的分布式存儲(chǔ)引擎,所以需要集成下面。

Apache ORCFile (存儲(chǔ)格式,編碼和壓縮)

  • 只訪問查詢涉及的列,能大量降低系統(tǒng)I/O;列數(shù)據(jù)相對(duì)來說比較類似,壓縮比更高;每一列由一個(gè)線索來處理,更有利于查詢的并發(fā)處理。

因此選擇了這三種技術(shù)的組合。

Doris的系統(tǒng)架構(gòu)如下圖: 架構(gòu)很簡潔,只設(shè)FE(Frontend)、BE(Backend)兩種角色、兩個(gè)進(jìn)程,不依賴于外部組件,方便部署和運(yùn)維。

Doris 的整體架構(gòu)和 TiDB 類似,借助 MySQL 協(xié)議,用戶使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客戶端,都可以直接訪問 Doris。

Doris 中的模塊包括 FE 和 BE 兩類:FE 主要負(fù)責(zé)元數(shù)據(jù)的管理、存儲(chǔ),以及查詢的解析等;一個(gè)用戶請(qǐng)求經(jīng)過 FE 解析、規(guī)劃后,具體的執(zhí)行計(jì)劃會(huì)發(fā)送給 BE,BE 則會(huì)完成查詢的具體執(zhí)行。BE 節(jié)點(diǎn)主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)、以及查詢計(jì)劃的執(zhí)行。

2.1 核心組件介紹

Doris 的架構(gòu)很簡潔,只設(shè) FE(Frontend)、BE(Backend)兩種角色、兩個(gè)進(jìn)程,不依賴于外部組件,方便部署和運(yùn)維。

  • 以數(shù)據(jù)存儲(chǔ)的角度觀之,F(xiàn)E 存儲(chǔ)、維護(hù)集群元數(shù)據(jù);BE 存儲(chǔ)物理數(shù)據(jù)。
  • 以查詢處理的角度觀之, FE 節(jié)點(diǎn)接收、解析查詢請(qǐng)求,規(guī)劃查詢計(jì)劃,調(diào)度查詢執(zhí)行,* 返回查詢結(jié)果;BE 節(jié)點(diǎn)依據(jù) FE 生成的物理計(jì)劃,分布式地執(zhí)行查詢。

名詞解釋

名詞 說明
FE Frontend,即 Doris 的前端節(jié)點(diǎn)。以 Java 語言為主,主要負(fù)責(zé)接收和返回客戶端請(qǐng)求、元數(shù)據(jù)以及集群管理、查詢計(jì)劃生成等工作。
BE Backend,即 Doris 的后端節(jié)點(diǎn)。以 C++ 語言為主,主要負(fù)責(zé)數(shù)據(jù)存儲(chǔ)與管理、查詢計(jì)劃執(zhí)行等工作。
Tablet Tablet是一張表實(shí)際的物理存儲(chǔ)單元,一張表按照分區(qū)和分桶后在BE構(gòu)成分布式存儲(chǔ)層中以Tablet為單位進(jìn)行存儲(chǔ),每個(gè)Tablet包括元信息及若干個(gè)連續(xù)的RowSet。
Rowset Rowset是Tablet中一次數(shù)據(jù)變更的數(shù)據(jù)集合,數(shù)據(jù)變更包括了數(shù)據(jù)導(dǎo)入、刪除、更新等。Rowset按版本信息進(jìn)行記錄。每次變更會(huì)生成一個(gè)版本。
Version 由Start、End兩個(gè)屬性構(gòu)成,維護(hù)數(shù)據(jù)變更的記錄信息。通常用來表示Rowset的版本范圍,在一次新導(dǎo)入后生成一個(gè)Start,End相等的Rowset,在Compaction后生成一個(gè)帶范圍的Rowset版本。
Segment 表示Rowset中的數(shù)據(jù)分段。多個(gè)Segment構(gòu)成一個(gè)Rowset。
Compaction 連續(xù)版本的Rowset合并的過程成稱為Compaction,合并過程中會(huì)對(duì)數(shù)據(jù)進(jìn)行壓縮操作。

FE(Frontend)

主要負(fù)責(zé)查詢的編譯,分發(fā)和元數(shù)據(jù)管理。

  • 1、管理元數(shù)據(jù)(庫、表、分區(qū)、tablet副本等信息),執(zhí)行SQL語句命令。
  • 2、FE高可用部署,使用復(fù)制協(xié)議選主和主從同步元數(shù)據(jù),所有的元數(shù)據(jù)修改操作,由FE Leader節(jié)點(diǎn)完成,F(xiàn)E Follower節(jié)點(diǎn)可執(zhí)行讀操作。 元數(shù)據(jù)的讀寫滿足順序一致性。 FE的節(jié)點(diǎn)數(shù)目采用2n+1,可容忍n個(gè)節(jié)點(diǎn)故障。當(dāng)FE Leader故障時(shí),從現(xiàn)有的Follower節(jié)點(diǎn)重新選主,完成故障切換。
    • Observer節(jié)點(diǎn)僅從 Leader節(jié)點(diǎn)進(jìn)行元數(shù)據(jù)同步,不參與選舉。能夠橫向擴(kuò)展以提供元數(shù)據(jù)的讀服務(wù)的擴(kuò)展性。
  • 3、FE的SQL layer對(duì)用戶提交的SQL進(jìn)行解析、分析、語義分析和關(guān)系代數(shù)優(yōu)化,生產(chǎn)邏輯執(zhí)行計(jì)劃。
  • 4、FE的Planner負(fù)責(zé)把邏輯計(jì)劃轉(zhuǎn)化為可分布式執(zhí)行的物理計(jì)劃,分發(fā)給一組BE。
  • 5、FE監(jiān)督,管理BE的上下線,根據(jù)BE的健康狀態(tài)和存活數(shù),維持tablet副本的數(shù)量。
  • 6、FE協(xié)調(diào)數(shù)據(jù)導(dǎo)入, 保證數(shù)據(jù)導(dǎo)入的一致性。

BE([Backend]

主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)、以及查詢計(jì)劃的執(zhí)行

  • 1、BE管理tablet副本,tablet是table經(jīng)過分區(qū)分桶形成的子表,采用列式存儲(chǔ)。
  • 2、BE受驅(qū)動(dòng)FE,創(chuàng)建或刪除子表。
  • 3、BE接收FE分發(fā)的物理執(zhí)行計(jì)劃并指定BE coordinator節(jié)點(diǎn),在BE coordinator的調(diào)度下,與其他BE worker共同協(xié)作完成執(zhí)行。
  • 4、BE讀取本地的列存儲(chǔ)引擎獲取數(shù)據(jù),并通過索引和謂詞下沉快速過濾數(shù)據(jù)。
  • 5、BE后臺(tái)執(zhí)行compact任務(wù),減少查詢時(shí)的讀放大。
  • 6、數(shù)據(jù)導(dǎo)入時(shí), 由FE指定BE coordinator,將數(shù)據(jù)以fanout的形式寫入到tablet多副本所在的BE上。

MySQL Client

Doris借助MySQL協(xié)議,用戶使用任意MySQL的ODBC/JDBC以及MySQL的客戶
端,都可以直接訪問Doris

Broker

Broker為一個(gè)獨(dú)立的無狀態(tài)進(jìn)程。封裝了文件系統(tǒng)接口,提供Doris讀取遠(yuǎn)端存儲(chǔ)系統(tǒng)中文件的能力,包括HDFS、S3、BOS等

元數(shù)據(jù)

  • Doris 采用 Paxos 協(xié)議以及 Memory + Checkpoint + Journal 的機(jī)制來確保元數(shù)據(jù)的高性能及高可靠。
  • 元數(shù)據(jù)的每次更新,都首先寫入到磁盤的日志文件中,然后再寫到內(nèi)存中,最后定期 checkpoint 到本地磁盤上。相當(dāng)于是一個(gè)純內(nèi)存的一個(gè)結(jié)構(gòu),也就是說所有的元數(shù)據(jù)都會(huì)緩存在內(nèi)存之中,從而保證 FE 在宕機(jī)后能夠快速恢復(fù)元數(shù)據(jù),而且不丟失元數(shù)據(jù)。* Leader、follower 和 observer 它們?nèi)齻€(gè)構(gòu)成一個(gè)可靠的服務(wù),這樣如果發(fā)生節(jié)點(diǎn)宕機(jī)的情況,在百度內(nèi)部的話,一般是部署一個(gè) leader 兩個(gè) follower,外部公司目前來說基本上也是這么部署的。就是說三個(gè)節(jié)點(diǎn)去達(dá)到一個(gè)高可用服務(wù)。
  • 單機(jī)的節(jié)點(diǎn)故障的時(shí)候其實(shí)基本上三個(gè)就夠了,因?yàn)?FE 節(jié)點(diǎn)畢竟它只存了一份元數(shù)據(jù),它的壓力不大,所以如果 FE 太多的時(shí)候它會(huì)去消耗機(jī)器資源,所以多數(shù)情況下三個(gè)就足夠了,可以達(dá)到一個(gè)很高可用的元數(shù)據(jù)服務(wù)

Doris FE高可用方案:

  • 如果你是離線業(yè)務(wù),對(duì)高可用要求不是那么高可以使用 1 FE(Follower leader) + 1 FE(Observer)
  • 如果你是實(shí)時(shí)在線業(yè)務(wù),對(duì)高可用要求很高,建議使用 3 FE(Follower),會(huì)自動(dòng)選舉出一個(gè) leader

數(shù)據(jù)分布及可靠性

Doris 數(shù)據(jù)主要都是存儲(chǔ)在 BE 里面,BE 節(jié)點(diǎn)上物理數(shù)據(jù)的可靠性通過多副本來實(shí)現(xiàn),默認(rèn)是 3 副本,副本數(shù)可配置且可隨時(shí)動(dòng)態(tài)調(diào)整,滿足不同可用性級(jí)別的業(yè)務(wù)需求。FE 調(diào)度 BE 上副本的分布與補(bǔ)齊。

如果說用戶對(duì)可用性要求不高,而對(duì)資源的消耗比較敏感的話,我們可以在建表的時(shí)候選擇建兩副本或者一副本。比如在百度云上我們給用戶建表的時(shí)候,有些用戶對(duì)它的整個(gè)資源消耗比較敏感,因?yàn)樗顿M(fèi),所以他可能會(huì)建兩副本。但是我們一般不太建議用戶建一副本,因?yàn)橐桓北镜那闆r下可能一旦機(jī)器出問題了,數(shù)據(jù)直接就丟了,很難再恢復(fù)。我們在公司內(nèi)部的話,一般是默認(rèn)建三副本,這樣基本可以保證一臺(tái)機(jī)器單機(jī)節(jié)點(diǎn)宕機(jī)的情況下不會(huì)影響整個(gè)服務(wù)的正常運(yùn)作。

3.doris內(nèi)部組件及周邊生態(tài)組件介紹

3.1 Frontend(FE)

Java語言開發(fā),Doris 系統(tǒng)的元數(shù)據(jù)管理和節(jié)點(diǎn)調(diào)度。在導(dǎo)入流程中主要負(fù)責(zé)導(dǎo)入 plan 生成和導(dǎo)入任務(wù)的調(diào)度工作,請(qǐng)求接入等

3.2 Backend(BE)

C++語言開發(fā),Doris 系統(tǒng)的計(jì)算和存儲(chǔ)節(jié)點(diǎn),執(zhí)行SQL計(jì)劃等。在導(dǎo)入流程中主要負(fù)責(zé)數(shù)據(jù)的 ETL 和存儲(chǔ)。

3.3 Broker

Broker 為一個(gè)獨(dú)立的無狀態(tài)進(jìn)程。封裝了文件系統(tǒng)接口,提供 Doris 讀取遠(yuǎn)端存儲(chǔ)系統(tǒng)中文件的能力,包括HDFS,S3,BOS等

3.4 Mysql Client

Doris 借助 MySQL 協(xié)議,用戶使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客戶端,都可以直接訪問 Doris

3.5 Doris on ES

Doris-On-ES將Doris的分布式查詢規(guī)劃能力和ES(Elasticsearch)的全文檢索能力相結(jié)合,提供更完善的OLAP分析場景解決方案:

  • ES中的多index分布式Join查詢
  • Doris和ES中的表聯(lián)合查詢,更復(fù)雜的全文檢索過濾

3.6 ODBC External Table Of Doris

ODBC External Table Of Doris 提供了Doris通過數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)接口(ODBC)來訪問外部表,外部表省去了繁瑣的數(shù)據(jù)導(dǎo)入工作,讓Doris可以具有了訪問各式數(shù)據(jù)庫的能力,并借助Doris本身的OLAP的能力來解決外部表的數(shù)據(jù)分析問題:

  • 支持各種數(shù)據(jù)源接入Doris
  • 支持Doris與各種數(shù)據(jù)源中的表聯(lián)合查詢,進(jìn)行更加復(fù)雜的分析操作
  • 通過insert into將Doris執(zhí)行的查詢結(jié)果寫入外部的數(shù)據(jù)源

3.7 Spark Doris Connector

Spark Doris Connector 可以支持通過 Spark 讀取 Doris 中存儲(chǔ)的數(shù)據(jù)。

  • 當(dāng)前版本只支持從Doris中讀取數(shù)據(jù)。
  • 可以將Doris表映射為DataFrame或者RDD,推薦使用DataFrame。
  • 支持在Doris端完成數(shù)據(jù)過濾,減少數(shù)據(jù)傳輸量。

3.8 Flink Doris Connector

Flink Doris Connector 可以支持通過 Flink 讀取 Doris 中存儲(chǔ)的數(shù)據(jù)。

  • 可以將Doris表映射為DataStream或者Table
  • 支持通過Flink table的方式使用doris數(shù)據(jù)
  • 可以通過Flink table 方式方便的將數(shù)據(jù)通過insert into select方式將數(shù)據(jù)插入到doris表中

3.9 DataX doriswriter

DataX doriswriter 插件,用于通過 DataX 同步其他數(shù)據(jù)源的數(shù)據(jù)到 Doris 中。

這個(gè)插件是利用Doris的Stream Load 功能進(jìn)行數(shù)據(jù)導(dǎo)入的。需要配合 DataX 服務(wù)一起使用。

這個(gè)擴(kuò)展可以很方便的將業(yè)務(wù)數(shù)據(jù)庫中的數(shù)據(jù)快速的抽取導(dǎo)入到doris數(shù)倉中

3.10 Doris output plugin

該插件用于logstash輸出數(shù)據(jù)到Doris,使用 HTTP 協(xié)議與 Doris FE Http接口交互,并通過 Doris 的 stream load 的方式進(jìn)行數(shù)據(jù)導(dǎo)入.

3.11 審計(jì)日志擴(kuò)展

Doris 的審計(jì)日志插件是在 FE 的插件框架基礎(chǔ)上開發(fā)的。是一個(gè)可選插件。用戶可以在運(yùn)行時(shí)安裝或卸載這個(gè)插件。

該插件可以將 FE 的審計(jì)日志定期的導(dǎo)入到指定 Doris 集群中,以方便用戶通過 SQL 對(duì)審計(jì)日志進(jìn)行查看和分析。

4、使用場景

報(bào)表分析可視化

  • 實(shí)時(shí)儀表板
  • 內(nèi)部分析師和經(jīng)理的報(bào)告
  • 高度并發(fā)的面向用戶或面向客戶的報(bào)表分析

ad-hoc

  • 以分析師為導(dǎo)向的自助服務(wù)分析,具有不規(guī)則的查詢模式和高吞吐量要求。

統(tǒng)一數(shù)據(jù)倉庫建設(shè)

  • 一個(gè)滿足統(tǒng)一數(shù)據(jù)倉庫建設(shè)需求和簡化復(fù)雜數(shù)據(jù)軟件堆棧的平臺(tái)。
  • 流批一體
  • 實(shí)時(shí)數(shù)倉

數(shù)據(jù)湖查詢

  • 通過使用外部表聯(lián)合位于 Apache Hive、Apache Iceberg 和Apache Hudi 中的數(shù)據(jù),查詢性能大大提高,同時(shí)避免了數(shù)據(jù)復(fù)制。

參考:
https://doris.apache.org/zh-CN/docs/dev/summary/basic-summary

https://zhuanlan.zhihu.com/p/400642016

https://blog.csdn.net/Shockang/article/details/127062897

https://blog.csdn.net/qq_43141726/article/details/120607561

https://blog.csdn.net/yy8623977/article/details/126072971

https://blog.csdn.net/Hello_Java2018/article/details/124806183

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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