Apache Pinot 简介

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 控制器。