導讀:Apache Druid是一個集時間序列數據庫、數據倉庫和全文檢索系統特色於一體的分析性數據平臺。本文將帶你簡單瞭解Druid的特性,使用場景,技術特色和架構。這將有助於你選型數據存儲方案,深刻了解Druid存儲,深刻了解時間序列存儲等。
Apache Druid是一個高性能的實時分析型數據庫。web
Druid是爲快速查詢和快速攝入數據的工做流而設計的。Druid強在有強大的UI,運行時可操做查詢,和高性能併發處理。Druid能夠被視爲一個知足多樣化用戶場景的數據倉庫的開源替代品。算法
Druid能夠從消息總線流式獲取數據(如Kafka,Amazon Kinesis),或從數據湖批量加載文件(如HDFS,Amazon S3和其餘同類數據源)。數據庫
Druid對數據攝入和數據查詢的基準性能測試大大超過了傳統解決方案。服務器
Druid的架構融合了數據倉庫,時間序列數據庫和檢索系統最好的特性。網絡
Druid爲Clickstream,APM(應用性能管理系統),supply chain(供應鏈),網絡遙測,數字營銷和其餘事件驅動形式的場景解鎖了新的查詢方式和工做流。Druid專爲實時和歷史數據的快速臨時查詢而構建。數據結構
Druid能夠部署在任何*NIX環境中。不管是內部環境仍是雲環境。部署Druid是很是easy的:經過添加或刪減服務來擴容縮容。架構
Apache Druid適用於對實時數據提取,高性能查詢和高可用要求較高的場景。所以,Druid一般被做爲一個具備豐富GUI的分析系統,或者做爲一個須要快速聚合的高併發API的後臺。Druid更適合面向事件數據。併發
比較常見的使用場景:運維
下面將詳細分析這些使用場景:分佈式
Druid常常用在點擊流,訪問流,和活動流數據上。具體場景包括:衡量用戶參與度,爲產品發佈追蹤A/B測試數據,並瞭解用戶使用方式。Druid能夠作到精確和近似計算用戶指標,例如不重複計數指標。這意味着,如日活用戶指標能夠在一秒鐘計算出近似值(平均精度98%),以查看整體趨勢,或精確計算以展現給利益相關者。Druid能夠用來作「漏斗分析」,去測量有多少用戶作了某種操做,而沒有作另外一個操做。這對產品追蹤用戶註冊十分有用。
Druid經常用來收集和分析網絡流數據。Druid被用於管理以任意屬性切分組合的流數據。Druid可以提取大量網絡流記錄,而且可以在查詢時快速對數十個屬性組合和排序,這有助於網絡流分析。這些屬性包括一些核心屬性,如IP和端口號,也包括一些額外添加的強化屬性,如地理位置,服務,應用,設備和ASN。Druid可以處理非固定模式,這意味着你能夠添加任何你想要的屬性。
Druid經常用來存儲和查詢在線廣告數據。這些數據一般來自廣告服務商,它對衡量和理解廣告活動效果,點擊穿透率,轉換率(消耗率)等指標相當重要。
Druid最初就是被設計成一個面向廣告數據的強大的面向用戶的分析型應用程序。在存儲廣告數據方面,Druid已經有大量生產實踐,全世界有大量用戶在上千臺服務器上存儲了PB級數據。
Druid經常用於追蹤應用程序生成的可運營數據。和用戶活動使用場景相似,這些數據能夠是關於用戶怎樣和應用程序交互的,它能夠是應用程序自身上報的指標數據。Druid可用於下鑽發現應用程序不一樣組件的性能如何,定位瓶頸,和發現問題。
不像許多傳統解決方案,Druid具備更小存儲容量,更小複雜度,更大數據吞吐的特色。它能夠快速分析數以千計屬性的應用事件,並計算複雜的加載,性能,利用率指標。好比,基於百分之95查詢延遲的API終端。咱們能夠以任何臨時屬性組織和切分數據,如以天爲時間切分數據,如以用戶畫像統計,如按數據中心位置統計。
Driud能夠做爲時間序列數據庫解決方案,來存儲處理服務器和設備的指標數據。收集機器生成的實時數據,執行快速臨時的分析,去估量性能,優化硬件資源,和定位問題。
和許多傳統時間序列數據庫不一樣,Druid本質上是一個分析引擎。Druid融合了時間序列數據庫,列式分析數據庫,和檢索系統的理念。它在單個系統中支持了基於時間分區,列式存儲,和搜索索引。這意味着基於時間的查詢,數字聚合,和檢索過濾查詢都會特別快。
你能夠在你的指標中包括百萬惟一維度值,並隨意按任何維度組合group和filter(Druid 中的 dimension維度相似於時間序列數據庫中的tag)。你能夠基於tag group和rank,並計算大量複雜的指標。並且你在tag上檢索和過濾會比傳統時間序列數據庫更快。
Druid常常用於商業智能場景。公司部署Druid去加速查詢和加強應用。和基於Hadoop的SQL引擎(如Presto或Hive)不一樣,Druid爲高併發和亞秒級查詢而設計,經過UI強化交互式數據查詢。這使得Druid更適合作真實的可視化交互分析。
Apache Druid 是一個開源的分佈式數據存儲引擎。Druid的核心設計融合了OLAP/analytic databases,timeseries database,和search systems的理念,以創造一個適用普遍用例的統一系統。Druid將這三種系統的主要特性融合進Druid的ingestion layer(數據攝入層),storage format(存儲格式化層),querying layer(查詢層),和core architecture(核心架構)中。
Druid的主要特性包括:
Druid單獨存儲並壓縮每一列數據。而且查詢時只查詢特定須要查詢的數據,支持快速scan,ranking和groupBy。
Druid爲string值建立反向索引以達到數據的快速搜索和過濾。
開箱即用的Apache kafka,HDFS,AWS S3鏈接器connectors,流式處理器。
Druid優雅地適應不斷變化的數據模式和嵌套數據類型。
Druid基於時間對數據進行智能分區。所以,Druid基於時間的查詢將明顯快於傳統數據庫。
除了原生的基於JSON的查詢外,Druid還支持基於HTTP和JDBC的SQL。
百萬/秒的數據攝入速率,海量數據存儲,亞秒級查詢。
能夠經過添加或移除Server來擴容和縮容。Druid支持自動重平衡,失效轉移。
Druid同時支持流式和批量數據攝入。Druid一般經過像Kafka這樣的消息總線(加載流式數據)或經過像HDFS這樣的分佈式文件系統(加載批量數據)來鏈接原始數據源。
Druid經過Indexing處理將原始數據以segment的方式存儲在數據節點,segment是一種查詢優化的數據結構。
像大多數分析型數據庫同樣,Druid採用列式存儲。根據不一樣列的數據類型(string,number等),Druid對其使用不一樣的壓縮和編碼方式。Druid也會針對不一樣的列類型構建不一樣類型的索引。
相似於檢索系統,Druid爲string列建立反向索引,以達到更快速的搜索和過濾。相似於時間序列數據庫,Druid基於時間對數據進行智能分區,以達到更快的基於時間的查詢。
不像大多數傳統系統,Druid能夠在數據攝入前對數據進行預聚合。這種預聚合操做被稱之爲rollup,這樣就能夠顯著的節省存儲成本。
Druid支持JSON-over-HTTP和SQL兩種查詢方式。除了標準的SQL操做外,Druid還支持大量的惟一性操做,利用Druid提供的算法套件能夠快速的進行計數,排名和分位數計算。
Druid是微服務架構,能夠理解爲一個拆解成多個服務的數據庫。Druid的每個核心服務(ingestion(攝入服務),querying(查詢服務),和coordination(協調服務))均可以單獨部署或聯合部署在商業硬件上。
Druid清晰的命名每個服務,以確保運維人員能夠根據使用狀況和負載狀況很好地調整相應服務的參數。例如,當負載須要時,運維人員能夠給數據攝入服務更多的資源而減小數據查詢服務的資源。
Druid能夠獨立失敗而不影響其餘服務的運行。
Drui被設計成一個健壯的系統,它須要7*24小時運行。Druid擁有如下特性,以確保長期運行,並保證數據不丟失。
Druid根據配置的副本數建立多個數據副本,因此單機失效不會影響Druid的查詢。
Druid清晰的命名每個主服務,每個服務均可以根據使用狀況作相應的調整。服務能夠獨立失敗而不影響其餘服務的正常運行。例如,若是數據攝入服務失效了,將沒有新的數據被加載進系統,可是已經存在的數據依然能夠被查詢。
Druid自動備份全部已經indexed的數據到一個文件系統,它能夠是分佈式文件系統,如HDFS。你能夠丟失全部Druid集羣的數據,並快速從備份數據中從新加載。
經過滾動更新,你能夠在不停機的狀況下更新Druid集羣,這樣對用戶就是無感知的。全部Druid版本都是向後兼容。
想了解時間序列數據庫和對比,可移步另外一篇文章:
關注公衆號,深刻了解TSDB,Druid。獲取更多技術內容。