一、業務需求
微博萬億級別數據,實時攝取,實時數據多維分析,低延時響應
二、調研實時OLAP
clickhouse, druid,pinot,感覺這篇文章寫得不錯:https://medium.com/@leventov/comparison-of-the-open-source-olap-systems-for-big-data-clickhouse-druid-and-pinot-8e042a5ed1c7
我們覺得pinot更適合我們的需求,於是對pinot進行深入調研,包括部署,數據攝取,數據查詢等
三、pinot介紹
https://github.com/apache/incubator-pinot
Pinot 是一個實時分佈式的 OLAP 數據存儲和分析系統。使用它實現低延遲可伸縮的實時分析。Pinot 從離線數據源(包括 Hadoop 和各類文件)和在線數據源(如 Kafka)中攫取數據進行分析。Pinot 被設計是可以進行水平擴展的。
Pinot 特別適合這樣的數據分析場景:查詢具有大量維度和指標的時間序列數據,分析模型固定,數據只追加以及低延遲,以及分析結果可查詢。
關鍵特性:
- 面向列的數據庫,具有各種壓縮方案,如運行長度,固定位長度
- 可插拔索引技術 - 排序索引,位圖索引,倒排索引
- 能夠根據查詢和段元數據優化查詢/執行計劃。
- 幾乎實時從流中攝取和從Hadoop批量攝取
- SQL類似於支持選擇,聚合,過濾,分組依據,對數據進行不同查詢的語言。
- 支持多值字段
- 水平可擴展和容錯
Pinot存在一定的侷限性:
- Pinot不是數據庫的替代品,即它不能用作真值存儲源,不能改變數據
- 不是搜索引擎的替代品,即全文搜索,不支持相關性
- 查詢不能跨越多個表。
Pinot架構
Pinot核心組件及組件的主要功能
1、controller
管理集羣中的節點
對Table和Segment的創建、更新和刪除操作的處理
計算Table和Segment在server上的分配
2、broker
它接收客戶端的查詢請求,並且將路由到多個服務上(根據路由策略), 合併接收的查詢結果並返回給客戶端。
3、server 它保存一個或者多個物理的Segment,職責包括:
當被分配一個預先創建的segment,下載並且裝載這個Segment,當被分配一個Kafka Topic,從kafka的partion的一個子集中消費數據
執行查詢請求並將結果返回給broker