一、爲什麼微博需要用Apache Pinot?
微博有很多的業務的場景和非常大量的實時數據和離線數據,在沒有使用Pinot之前,我們使用實時檢索引擎elsaticsearch對數據進行檢索和kibana進行可視化。問題是隨着業務的逐漸增多,很多業務需要實時多維秒級查詢近百億的數據,elasticsearch很顯然不擅長做多維分析,響應時間很長,對此需要一個實時OLAP來解決這種問題。
在對druid,clickhouse,pinot進行調研之後,首選java寫的,畢竟可能要看源代碼,然後覺得pinot的運維簡單,最後測試pinot響應時間滿足需求,多維查詢性能還是很不錯的。在使用pinot之後,業務只需要在數據庫進行配置,調度系統自動從數據倉庫攝取數據,或者從kafka實時的攝取數據。
二、Apache Pinot 在微博的使用場景?
- 智能預警
- 實時OLAP分析
- 根因分析
- A/B test
三、Apache Pinot架構
Apache Pinot的架構主要是Lambda,分成實時層和離線層。主要的節點包括:
- controller 節點:管理集羣中的節點、對Table和Segment的創建、更新和刪除操作的處理和計算Table和Segment在server上的分配
- broker 節點:接收客戶端的查詢請求,並且將路由到多個服務上(根據路由策略), 合併接收的查詢結果並返回給客戶端
- server 節點: 當被分配一個預先創建的segment,下載並且裝載這個Segment,當被分配一個Kafka Topic,從kafka的partion的一個子集中消費數據。執行查詢請求並將結果返回給broker。
四、微博OLAP平臺的架構和功能分析
Apache Pinot和周圍的組件共同組合成微博OLAP平臺,其主要功能:
- hubble多維數據實時分析,可視化展示
- cosmos智能調度系統,數據精準導入Pinot
- thirdeye 根因分析系統,對比分析
- 智能預警系統,實時數據異常報警