1. 程式人生 > 實用技巧 >​十分鐘瞭解 Apache Druid

​十分鐘瞭解 Apache Druid

十分鐘瞭解 Apache Druid

概覽

Apache Druid 是一個高效能的實時分析型資料庫。

  • 一個現代化的雲原生,流原生,分析型資料庫

    Druid 是為快速查詢和快速攝入資料的工作流而設計的。Druid 強在有強大的 UI,執行時可操作查詢,和高效能併發處理。Druid 可以被視為一個滿足多樣化使用者場景的資料倉庫的開源替代品。

  • 輕鬆與現有的資料管道整合

    Druid 可以從訊息匯流排流式獲取資料(如 Kafka,Amazon Kinesis),或從資料湖批量載入檔案(如 HDFS,Amazon S3 和其他同類資料來源)。

  • 比傳統方案快 100 倍的效能

    Druid 對資料攝入和資料查詢的基準效能測試大大超過了傳統解決方案。

    Druid 的架構融合了資料倉庫,時間序列資料庫和檢索系統最好的特性。

  • 解鎖新的工作流

    Druid 為 Clickstream,APM(應用效能管理系統),supply chain(供應鏈),網路遙測,數字營銷和其他事件驅動形式的場景解鎖了新的查詢方式和工作流。Druid 專為實時和歷史資料的快速臨時查詢而構建。

  • 部署在 AWS/GCP/Azure,混合雲,k8s 和租用伺服器上

    Druid 可以部署在任何*NIX 環境中。無論是內部環境還是雲環境。部署 Druid 是非常 easy 的:通過新增或刪減服務來擴容縮容。

使用場景

Apache Druid 適用於對實時資料提取,高效能查詢和高可用要求較高的場景。因此,Druid 通常被作為一個具有豐富 GUI 的分析系統,或者作為一個需要快速聚合的高併發 API 的後臺。Druid 更適合面向事件資料。

比較常見的使用場景:

  • 點選流分析(web 和 mobile 分析)

  • 風控分析

  • 網路遙測分析(網路效能監控)

  • 伺服器指標儲存

  • 供應鏈分析(製造業指標)

  • 應用效能指標

  • 商業智慧/實時線上分析系統 OLAP

下面將詳細分析這些使用場景:

使用者活動和行為

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 上檢索和過濾會比傳統時間序列資料庫更快。

OLAP 和商業智慧

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(核心架構)中。

img

Druid 的主要特性包括:

  • 列式儲存

    Druid 單獨儲存並壓縮每一列資料。並且查詢時只查詢特定需要查詢的資料,支援快速 scan,ranking 和 groupBy。

  • 原生檢索索引

    Druid 為 string 值建立反向索引以達到資料的快速搜尋和過濾。

  • 流式和批量資料攝入

    開箱即用的 Apache kafka,HDFS,AWS S3 聯結器 connectors,流式處理器。

  • 靈活的資料模式

    Druid 優雅地適應不斷變化的資料模式和巢狀資料型別。

  • 基於時間的優化分割槽

    Druid 基於時間對資料進行智慧分割槽。因此,Druid 基於時間的查詢將明顯快於傳統資料庫。

  • 支援 SQL 語句

    除了原生的基於 JSON 的查詢外,Druid 還支援基於 HTTP 和 JDBC 的 SQL。

  • 水平擴充套件能力

    百萬/秒的資料攝入速率,海量資料儲存,亞秒級查詢。

  • 易於運維

    可以通過新增或移除 Server 來擴容和縮容。Druid 支援自動重平衡,失效轉移。

資料攝入

Druid 同時支援流式和批量資料攝入。Druid 通常通過像 Kafka 這樣的訊息匯流排(載入流式資料)或通過像 HDFS 這樣的分散式檔案系統(載入批量資料)來連線原始資料來源。

Druid 通過 Indexing 處理將原始資料以 segment 的方式儲存在資料節點,segment 是一種查詢優化的資料結構。

img

資料儲存

像大多數分析型資料庫一樣,Druid 採用列式儲存。根據不同列的資料型別(string,number 等),Druid 對其使用不同的壓縮和編碼方式。Druid 也會針對不同的列型別構建不同型別的索引。

類似於檢索系統,Druid 為 string 列建立反向索引,以達到更快速的搜尋和過濾。類似於時間序列資料庫,Druid 基於時間對資料進行智慧分割槽,以達到更快的基於時間的查詢。

不像大多數傳統系統,Druid 可以在資料攝入前對資料進行預聚合。這種預聚合操作被稱之為 rollup,這樣就可以顯著的節省儲存成本。

img

查詢

Druid 支援 JSON-over-HTTP 和 SQL 兩種查詢方式。除了標準的 SQL 操作外,Druid 還支援大量的唯一性操作,利用 Druid 提供的演算法套件可以快速的進行計數,排名和分位數計算。

img

架構

Druid 是微服務架構,可以理解為一個拆解成多個服務的資料庫。Druid 的每一個核心服務(ingestion(攝入服務),querying(查詢服務),和 coordination(協調服務))都可以單獨部署或聯合部署在商業硬體上。

Druid 清晰的命名每一個服務,以確保運維人員可以根據使用情況和負載情況很好地調整相應服務的引數。例如,當負載需要時,運維人員可以給資料攝入服務更多的資源而減少資料查詢服務的資源。

Druid 可以獨立失敗而不影響其他服務的執行。

diagram-7

運維

Drui 被設計成一個健壯的系統,它需要 7*24 小時執行。Druid 擁有以下特性,以確保長期執行,並保證資料不丟失。

  • 資料副本

    Druid 根據配置的副本數建立多個數據副本,所以單機失效不會影響 Druid 的查詢。

  • 獨立服務

    Druid 清晰的命名每一個主服務,每一個服務都可以根據使用情況做相應的調整。服務可以獨立失敗而不影響其他服務的正常執行。例如,如果資料攝入服務失效了,將沒有新的資料被載入進系統,但是已經存在的資料依然可以被查詢。

  • 自動資料備份

    Druid 自動備份所有已經 indexed 的資料到一個檔案系統,它可以是分散式檔案系統,如 HDFS。你可以丟失所有 Druid 叢集的資料,並快速從備份資料中重新載入。

  • 滾動更新

    通過滾動更新,你可以在不停機的情況下更新 Druid 叢集,這樣對使用者就是無感知的。所有 Druid 版本都是向後相容。

歷史好文推薦

  1. Kafka實戰寶典:Kafka的控制器controller詳解

  2. Kafka實戰寶典:一文帶解決Kafka常見故障處理

  3. kafka實戰寶典:手動修改消費偏移量的兩種方式

  4. Kafka實戰寶典:如何跨機房傳輸資料