Apache Pinot 簡介

banq發表於2024-06-18

Apache Pinot最初由 LinkedIn 開發,是一個實時分散式OLAP(線上分析處理)資料儲存,旨在為分析查詢提供低延遲和高吞吐量。在本文中,我們將探索 Apache Pinot 的主要功能和架構,並學習如何與其互動。

什麼是 Apache Pinot?
Apache Pinot 是一個實時分散式 OLAP(線上分析處理)資料儲存,旨在為分析查詢提供低延遲和高吞吐量。它針對處理大規模時間序列資料進行了最佳化,通常用於分析事件流、日誌和其他型別的實時資料。以下是它的一些主要功能:

  • 實時和批次資料提取:Pinot 可以從 Kafka 等流中實時提取資料,也可以從 Hadoop 或 S3 等來源批次提取資料。
  • 低延遲查詢:Pinot 旨在處理具有亞秒級響應時間的複雜 OLAP 查詢。
  • 可擴充套件性:可以透過新增更多伺服器來水平擴充套件以處理增加的負載。
  • 可插入索引:支援各種索引技術,如倒排索引、排序索引、範圍索引等,以最佳化查詢效能。
  • 模式靈活性:允許在不停機的情況下不斷髮展模式。
  • 支援類似 SQL 的查詢語言:提供類似 SQL 的語言來查詢資料,使熟悉 SQL 的使用者也可以訪問。

架構
Apache Pinot 由幾個關鍵元件組成,它們協同工作以提供實時分散式 OLAP 功能。這些元件包括:

  • 叢集:它收集攝取、儲存和處理資料所需的軟體程序和硬體資源。這些程序包括控制器、Zookeeper、伺服器、代理和 Minion。Pinot使用Apache Zookeeper作為分散式後設資料儲存,並使用Apache Helix進行叢集管理。
  • 控制器:控制器管理叢集並協調分段建立、路由和資料管理等任務。它還處理配置管理和叢集後設資料。
  • Broker:Broker 元件負責查詢路由。它接收來自客戶端的查詢,並將它們路由到儲存相關資料段的適當伺服器。然後,Broker 彙總結果並將其返回給客戶端。
  • 伺服器:伺服器儲存和管理資料段、處理查詢並將結果返回給代理。它負責實時提取和索引資料。
  • Minion:Minion 元件負責處理後臺任務,例如資料壓縮、段管理和離線段生成。它將這些任務從伺服器解除安裝,以確保高效的資源利用率。
  • 租戶:租戶可實現多租戶,允許使用者或應用程式共享叢集,同時保持資料和資源隔離,確保公平使用和效能隔離。
  • 段:Pinot 將資料儲存在段中,段是包含資料集子集的不可變檔案。每個段都針對快速讀取進行最佳化,利用列式儲存等技術來提高查詢效能。Pinot 在多個節點之間複製段以確保資料可用性和容錯能力。


當我們提交查詢時,代理節點會將其分發到包含相關資料段的適當伺服器節點。伺服器節點處理查詢並將結果返回給代理節點,代理節點彙總結果並將其傳送回客戶端。這種分散式查詢處理可確保高效、快速地執行查詢。

安裝 Pinot
我們可以使用 Docker、Kubernetes 或直接在本地機器上安裝 Pinot。官方文件提供了各種安裝方法的詳細說明。我們將使用 Docker 進行安裝。

要透過 Docker 安裝 Pinot,系統需要透過以下標準:

  • 機器上必須安裝Docker 。
  • docker 記憶體必須配置至少 4 個 CPU、16GM 記憶體、4GB Swap 和 60 GB 磁碟映像大小。

設定並執行 Docker 後,在終端中執行以下命令來獲取最新的映像:

docker pull apachepinot/pinot:latest

與 Pinot 合作
現在我們已經下載了 docker 映象,讓我們設定叢集。Pinot 提供了快速啟動命令,可以在單個程序中啟動其元件的例項並匯入預構建的資料集。
 
讓我們從 QuickStart 中取一個例子,它啟動所有元件並建立一個名為 baseballStats 的表。
 
它啟動一個獨立的資料提取作業,從指定的 CSV 資料檔案為baseballStats表構建一個段,並將該段上傳到 Pinot 控制器:

docker run \
    -p 2123:2123 \
    -p 9000:9000 \
    -p 8000:8000 \
    -p 7050:7050 \
    -p 6000:6000 \
    apachepinot/pinot:1.1.0 QuickStart \
    -type batch

在上面的命令中,埠 2123 是 Zookeeper 埠,9000 是 Pinot Controller 埠,8000 對映到 Broker 埠,7050 是伺服器埠,6000 是 Minion 埠。
 
我們可以按照此處提到的步驟手動設定叢集。要驗證設定是否正確,請訪問http://localhost:9000 上的 Pinot 控制器。