Druid-高性能實(shí)時(shí)數(shù)據(jù)分析數(shù)據(jù)庫

概覽

事件流的分析

druid 提供了快速的分析查詢一個(gè)高并發(fā),在實(shí)時(shí)節(jié)點(diǎn)和歷史節(jié)點(diǎn)上掌眠;強(qiáng)大的用戶交互界面做瞪;

重構(gòu)思想

新型數(shù)據(jù)庫契讲,主要思想來自 OLAP/analytic databases,timerseries database,search systems在這個(gè)實(shí)時(shí)架構(gòu)中畸裳;

構(gòu)建下一代數(shù)據(jù)棧

原生集成了kafka AWS KinesiS 數(shù)據(jù)湖 HDFS AWS S3缰犁;工作時(shí)淳地,有良好的層次的數(shù)據(jù)流查詢架構(gòu)怖糊。

解鎖新的工作流程

構(gòu)建了一個(gè)快速的特別分析在實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)兩個(gè)方面;解釋趨勢(shì)颇象,探索數(shù)據(jù)伍伤,快速查詢回答問題。

任何地方部署

在任何×NIX環(huán)境中部署遣钳,商業(yè)硬件和云上部署都支持扰魂;原生云支持:擴(kuò)容和減少非常簡(jiǎn)單。

定義

druid是一個(gè)為高性能蕴茴、在大量數(shù)據(jù)集上分片和分塊分析 而設(shè)計(jì)的數(shù)據(jù)存儲(chǔ)

公共應(yīng)用場(chǎng)景領(lǐng)域

  • 點(diǎn)擊流分析
  • 網(wǎng)絡(luò)流量分析
  • 服務(wù)器指標(biāo)存儲(chǔ)
  • 應(yīng)用性能指標(biāo)
  • 數(shù)字營(yíng)銷分析
  • 商業(yè)智能/OLAP

應(yīng)用場(chǎng)景

  • 大比例的插入操作劝评,少量的更新操作
  • 大部分查詢應(yīng)用聚合和報(bào)告查詢使用group by、查詢或者掃描操作
  • 數(shù)據(jù)有一個(gè)時(shí)間列
  • load data from kafka HDFS Amazon S3

關(guān)鍵特征

列存儲(chǔ)格式

druid使用面向列的存儲(chǔ)倦淀,對(duì)一個(gè)特定的查詢只需要加載需要的列蒋畜,面對(duì)少量列的查詢有了一個(gè)速度的大幅提升,每一個(gè)列的存儲(chǔ)針對(duì)特定的數(shù)據(jù)類型做了存儲(chǔ)優(yōu)化撞叽,支持快速掃描和聚合姻成。

可擴(kuò)展的分布式系統(tǒng)

druid是一個(gè)典型的十到數(shù)百臺(tái)的集群服務(wù)部署,每秒百萬級(jí)的數(shù)據(jù)攝取愿棋,保留數(shù)萬條記錄科展,亞秒級(jí)到幾秒鐘的查詢延遲。

大規(guī)模并行處理

druid一個(gè)查詢并行處理在整個(gè)集中糠雨。

自健康檢查 自平衡 簡(jiǎn)單操作

擴(kuò)大集群才睹,增加、減少服務(wù)甘邀,這樣的操作集群會(huì)自動(dòng)平衡琅攘,無需停機(jī),如果一個(gè)服務(wù)失敗鹃答,路由會(huì)自動(dòng)繞個(gè)這個(gè)服務(wù)乎澄,直到找到可以替換的服務(wù)。druid設(shè)計(jì)成一個(gè)無需任何原因7×24小時(shí)不停機(jī)的運(yùn)行的架構(gòu)测摔,包括配置修改置济,軟件升級(jí).

原生云的 默認(rèn)容錯(cuò)不會(huì)丟失數(shù)據(jù)的架構(gòu)

一旦druid攝取了數(shù)據(jù)解恰,一個(gè)copy會(huì)被安全的存儲(chǔ)到deep storage,例如HDFS浙于、云存儲(chǔ)护盈、一個(gè)共享的文件系統(tǒng)中;及時(shí)每一個(gè)服務(wù)掛了羞酗,數(shù)據(jù)可以從deep storage恢復(fù)腐宋;對(duì)于一些失敗,影響了一些服務(wù)檀轨,備份確保一些查詢是可用的胸竞,直到系統(tǒng)被恢復(fù)。

用于快速過濾的索引服務(wù)

Druid使用CONCISE或 Roaring壓縮位圖索引來創(chuàng)建索引参萄,這些索引可以跨多個(gè)列進(jìn)行快速過濾和搜索卫枝。

近似算法

druid包含一些算法;近似count-distinct讹挎、近似排序校赤、位圖直方圖的近似計(jì)算,算法在有限內(nèi)存中基本上是快于準(zhǔn)確計(jì)算筒溃;這些場(chǎng)景是為了快速計(jì)算马篮;druid也提供了準(zhǔn)確的count-distinct和排序

攝取時(shí)自匯總

druid可選的支持?jǐn)z取時(shí)數(shù)據(jù)匯總,匯總可以預(yù)先聚合你的數(shù)據(jù)怜奖,可以大量開銷的節(jié)和性能提升浑测。

架構(gòu)

Historical

Historical是一個(gè)處理存儲(chǔ)和歷史數(shù)據(jù)查詢查詢到工作站,Historical處理從deep storage加載過來的segments烦周,對(duì)這些segments從broker發(fā)出的歷史數(shù)據(jù)的查詢做出回應(yīng)尽爆;他不接受寫;

MiddleManager

MiddleManager攝取新數(shù)據(jù)到集群中读慎;它負(fù)責(zé)度額外的數(shù)據(jù)源(新的實(shí)時(shí)的數(shù)據(jù))和發(fā)布新的druid segments

MiddleManager是一個(gè)執(zhí)行提交任務(wù)的工作節(jié)點(diǎn)漱贱;提交任務(wù)到peon上在一個(gè)獨(dú)立的JVMs,因?yàn)槿蝿?wù)的資源和日志的隔離夭委,每一個(gè)Peon使用了隔離的JVMS幅狮,每一個(gè)Peon同時(shí)每次只能運(yùn)行一個(gè)task,一個(gè)MiddleManager有多個(gè)peon株灸;

Broker

處理來自客戶端的查詢崇摄,解析將查詢重定向到Historical和MiddleManager,Broker接收到數(shù)據(jù)從這個(gè)子查詢中慌烧,合并這些結(jié)果然后返回給查詢者逐抑;

Coordinator

Corrdinator監(jiān)控Historical處理,負(fù)責(zé)分配segments到指定的服務(wù)屹蚊,確保存在HIstorical中是自平衡的厕氨;

Overlord

監(jiān)控MiddleManager處理和控制數(shù)據(jù)加載進(jìn)druid集群进每;對(duì)分配給MiddleManager的攝取任務(wù)和協(xié)調(diào)segments的發(fā)布負(fù)責(zé);

local or remote模式 默認(rèn)local
創(chuàng)建任務(wù)鎖

Router

可選服務(wù)命斧;提供了Brokers田晚,Overlords,Coordinator的統(tǒng)一路由網(wǎng)關(guān)国葬;


Peon(苦力)

Peons運(yùn)行一個(gè)單獨(dú)的任務(wù)在一個(gè)單獨(dú)的JVM,MiddleManager負(fù)責(zé)創(chuàng)建執(zhí)行任務(wù)的peon贤徒;peons自己運(yùn)行是非常稀少的。

總結(jié)

  1. Historical是歷史數(shù)據(jù)攝取和查詢到節(jié)點(diǎn)汇四,Coordinator監(jiān)控協(xié)調(diào)Historical節(jié)點(diǎn)上的任務(wù)接奈,確保segments自平衡;
  2. MiddleManager是一個(gè)新數(shù)據(jù)攝取和查詢的節(jié)點(diǎn)船殉;overlord監(jiān)控和協(xié)調(diào)task任務(wù)的分配和segments的發(fā)布鲫趁。
  3. 三種托管計(jì)劃:

"Data" servers run Historical and MiddleManager processes.
"Query" servers run Broker and (optionally) Router processes.
"Master" servers run Coordinator and Overlord processes. They may run ZooKeeper as well.

druid架構(gòu).png
額外依賴
  • Deep storage:一個(gè)被druid可訪問的共享的文件存儲(chǔ)斯嚎;比如分布式文件系統(tǒng)HDFS利虫、S3、一個(gè)網(wǎng)絡(luò)掛在的文件系統(tǒng)堡僻;用它來存儲(chǔ)已經(jīng)陪攝入的任何數(shù)據(jù)糠惫;
  • Metadata store:一個(gè)共享的元數(shù)據(jù)存儲(chǔ),典型的關(guān)系型數(shù)據(jù)庫PostgreSql和Mysql钉疫;
  • Zookeeper:一個(gè)被用來了額外服務(wù)發(fā)現(xiàn)硼讽、協(xié)調(diào)、領(lǐng)導(dǎo)選舉的牲阁;

這個(gè)額外依賴設(shè)計(jì)的idea是為了druid集群在生產(chǎn)環(huán)境容易擴(kuò)張固阁;比如:獨(dú)立的deep storage 和 metadata store 使集群處理是根本上的容錯(cuò)的;即使一個(gè)druid server失敵蔷铡备燃;你可以重啟集群從存儲(chǔ)在deep storage 和 Metadata store;

Datasources 和 segments

druid data 被存儲(chǔ)在打他source中凌唬,datasource按照時(shí)間進(jìn)行分區(qū)并齐;也可以用其他屬性進(jìn)行分區(qū),每一個(gè)時(shí)間范圍客税,叫做chunk况褪;一個(gè)chunk被分區(qū)到一個(gè)或多個(gè)segments,一個(gè)segments是一個(gè)單一的文件更耻;里面存儲(chǔ)典型的被壓縮的原生數(shù)據(jù)测垛;segments被組織成chunks;就像生活在這個(gè)時(shí)間線上秧均;datasource > chunk > segment;
一個(gè)datasource可能有幾個(gè)或幾千個(gè)甚至百萬個(gè)segments食侮;每一個(gè)segment在MiddleManager被創(chuàng)建脊奋,在這個(gè)時(shí)候segment是易變的沒有提交的;生成緊湊的支持快速查詢segment的步驟:

  1. 轉(zhuǎn)換為列模式
  2. 建立位圖索引
  3. 各種算法壓縮數(shù)據(jù):

最小存儲(chǔ)的字符串列的字典編碼
位圖索引的位圖壓縮
所有列的類型感知壓縮

定期提交和發(fā)布segments疙描;在這一時(shí)刻诚隙,他們被寫入深度存儲(chǔ),變成不可變的起胰,處理流程從MiddleManager轉(zhuǎn)移到HIstorical節(jié)點(diǎn)久又;一個(gè)關(guān)于這個(gè)segment的條目被寫入到Metadata store;這個(gè)條目關(guān)于segment是自描述的效五,包含segment的列信息地消,大小,deep storage的位置畏妖;這些條目是告訴Coordinator集群中有哪些數(shù)據(jù)是可以訪問的脉执。

查詢處理

查詢首先到達(dá)Broker,broker確定被修建的查詢需要的數(shù)據(jù)在哪些segments上戒劫;這個(gè)segments經(jīng)常按照時(shí)間被修剪半夷,也可以按照你datasource分區(qū)時(shí)的屬性進(jìn)行修剪;broker確定Historical還是MiddleManager服務(wù)于這些segments迅细,然后發(fā)出子查詢向Historical和MiddleManager巫橄,Historical和MiddleManager處理這些查詢,并返回結(jié)果茵典,broker匯總結(jié)果湘换,最終返回給調(diào)用者;
broker裁剪是druid限制每一個(gè)查詢掃描數(shù)據(jù)的關(guān)鍵方法统阿,但不是唯一途徑彩倚;broker可以采用更細(xì)粒度的過濾器進(jìn)行裁剪,segments內(nèi)部索引結(jié)構(gòu)允許druid指出過濾器匹配的數(shù)據(jù)扶平,在查看任何原生數(shù)據(jù)之前帆离;一旦druid知道匹配了一個(gè)特定查詢哪些行,他就會(huì)訪問查詢的指定列蜻直;druid可以在行之間進(jìn)行跳躍盯质,避免讀取查詢過濾器不匹配的數(shù)據(jù)。

druid最大化查詢性能的三種技術(shù)
  • 為每一個(gè)查詢修剪訪問的segments
  • 在每一個(gè)segment中概而,使用索引確定要訪問的列
  • 在每一個(gè)segment中呼巷,只讀取特定查詢的特定行和列

額外依賴

Deep storage

Druid使用deep stroage只作為一個(gè)數(shù)據(jù)的備份和一種druid內(nèi)部處理轉(zhuǎn)化數(shù)據(jù)的方式。為了相應(yīng)查詢赎瑰,Historical預(yù)先拉取segment從你的本地硬盤王悍,而不是deep stroage;這意味這druid在一個(gè)查詢期間從不需要訪問deep stroage餐曼,最少的降低延遲压储;這也意味著為了在deep storage和Historical處理你將要加載的數(shù)據(jù)鲜漩,你必須有足夠硬盤空間。

Metadata storage

存儲(chǔ)各種各樣的系統(tǒng)元數(shù)據(jù)

MySQL
metadata storage被訪問的節(jié)點(diǎn)(only)
  • Indexing Service Nodes
  • Realtime Nodes
  • Coordinator Nodes

只有overlord 和Coordinator能夠直接訪問Metadata storage

Zookeeper

druid使用zookeeper管理集群狀態(tài)集惋,使用場(chǎng)景

  • Coordinator選舉
  • segment publishing協(xié)議從Historical和Realtime
  • segment 加載/刪除協(xié)議在Coordinator和Historical
  • Overload選舉
  • Indexing Service管理任務(wù)

Task

Task Overview

tasks 跑在MiddleManager和總是操作單一的數(shù)據(jù)源
tasks 通過post請(qǐng)求發(fā)送到Overlord節(jié)點(diǎn)
幾種不同的tasks類型

Segment Creation Tasks

  • Hadoop Index Task
  • Native Index Tasks
  • Kafka Indexing Tasks
  • Stream Push Tasks (Tranquility)

Compaction Tasks

Segment Merging Tasks


Indexing Service

Indexing service是一個(gè)跑關(guān)于task索引的孕似、高可用、分布式服務(wù)刮刑。
Indexing tasks 創(chuàng)建了Druid的segments喉祭;Indexing service有一個(gè)主從架構(gòu)。
Indexing service 主要由3個(gè)組件構(gòu)成:a Peon雷绢、 a MiddleManager泛烙、a Overlord。
a Peon 跑一個(gè)單一的task翘紊;一個(gè)MiddleManager包含多個(gè)peons蔽氨,an Overlord管理多個(gè)分布式任務(wù)到MiddleManager。
當(dāng)MiddleManagers和peons總是跑在相同的節(jié)點(diǎn)時(shí)帆疟,Overlords和MiddleManager或許跑在同一個(gè)節(jié)點(diǎn)或跨越多個(gè)節(jié)點(diǎn)

task-流程.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鹉究,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸯匹,更是在濱河造成了極大的恐慌坊饶,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殴蓬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蟋滴,警方通過查閱死者的電腦和手機(jī)染厅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來津函,“玉大人肖粮,你說我怎么就攤上這事《啵” “怎么了涩馆?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)允坚。 經(jīng)常有香客問我魂那,道長(zhǎng),這世上最難降的妖魔是什么稠项? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任涯雅,我火速辦了婚禮,結(jié)果婚禮上展运,老公的妹妹穿的比我還像新娘活逆。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布败许。 她就那樣靜靜地躺著柑潦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锈遥。 梳的紋絲不亂的頭發(fā)上误算,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音迷殿,去河邊找鬼儿礼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛庆寺,可吹牛的內(nèi)容都是我干的蚊夫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼懦尝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼知纷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陵霉,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤琅轧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后踊挠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乍桂,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年效床,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睹酌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剩檀,死狀恐怖憋沿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沪猴,我是刑警寧澤辐啄,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站运嗜,受9級(jí)特大地震影響壶辜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洗出,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一士复、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦阱洪、人聲如沸便贵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽承璃。三九已至,卻和暖如春蚌本,著一層夾襖步出監(jiān)牢的瞬間盔粹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工程癌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舷嗡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓嵌莉,卻偏偏與公主長(zhǎng)得像进萄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锐峭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Druid基本概念及架構(gòu)介紹 1.什么是Druid Druid是一個(gè)專為大型數(shù)據(jù)集上的高性能切片和OLAP分析而設(shè)...
    it_zzy閱讀 53,034評(píng)論 0 32
  • Druid.io(以下簡(jiǎn)稱Druid)是面向海量數(shù)據(jù)的中鼠、用于實(shí)時(shí)查詢與分析的OLAP存儲(chǔ)系統(tǒng)。Druid的四大關(guān)鍵...
    大詩兄_zl閱讀 6,449評(píng)論 0 9
  • 我們知道Druid能夠同時(shí)提供對(duì)大數(shù)據(jù)集的實(shí)時(shí)攝入和高效復(fù)雜查詢的性能沿癞,主要原因就是它獨(dú)到的架構(gòu)設(shè)計(jì)和基于Data...
    零度沸騰_yjz閱讀 21,508評(píng)論 3 17
  • #refer1:http://www.cnblogs.com/xd502djj/p/6408979.html#re...
    liuzx32閱讀 1,903評(píng)論 0 1
  • 文/寶木笑 很小的時(shí)候就聽說過一個(gè)有名的典故:如何把鞋子賣給習(xí)慣了光腳的非洲部落土著援雇,這則典故又衍生出無數(shù)像是腦筋...
    寶木笑閱讀 898評(píng)論 3 34