1. 引言
Apache Pinot 最初由 LinkedIn 开发,是一个实时分布式 OLAP(在线分析处理)数据存储系统,专为分析查询提供低延迟和高吞吐量而设计。本文将深入探讨 Apache Pinot 的核心特性和架构,并学习如何与其交互。
2. 什么是 Apache Pinot?
Apache Pinot 是一个实时分布式 OLAP 数据存储系统,专为分析查询提供低延迟和高吞吐量而设计。它针对大规模时间序列数据进行了优化,常用于事件流、日志和其他实时数据的分析场景。以下是它的核心特性:
- ✅ 实时与批量数据摄取:Pinot 支持从 Kafka 等流式数据源实时摄取数据,也能从 Hadoop 或 S3 等批量数据源导入数据
- ⚡ 低延迟查询:设计用于处理复杂 OLAP 查询,响应时间可达亚秒级
- 📈 可扩展性:通过添加更多服务器实现水平扩展,轻松应对负载增长
- 🔧 可插拔索引:支持倒排索引、排序索引、范围索引等多种索引技术优化查询性能
- 🔄 模式灵活性:支持模式演进,无需停机即可更新数据结构
- 💬 类 SQL 查询语言:提供类 SQL 查询语言,降低 SQL 用户的学习成本
3. 架构
Apache Pinot 由多个关键组件协同工作,共同提供实时分布式 OLAP 能力。这些组件包括:
- 集群:整合了数据摄取、存储和处理所需的软件进程与硬件资源。进程包括控制器、ZooKeeper、服务器、代理和 Minion。Pinot 使用 Apache Zookeeper 作为分布式元数据存储,使用 Apache Helix 进行集群管理
- 控制器:管理集群并协调段创建、路由和数据管理等任务,同时处理配置管理和集群元数据
- 代理:负责查询路由,接收客户端查询并将其路由到持有相关数据段的服务器,然后聚合结果返回给客户端
- 服务器:存储和管理数据段,处理查询并将结果返回给代理,负责实时数据摄取和索引
- Minion:处理后台任务如数据压缩、段管理和离线索引生成,将服务器从这些任务中解放出来
- 租户:实现多租户功能,允许用户或应用共享集群的同时保持数据和资源隔离,确保公平使用和性能隔离
- 段:Pinot 将数据存储在段中,这些不可变文件包含数据集的子集。每个段通过列式存储等技术优化读取性能,并在多个节点间复制以确保数据可用性和容错
当我们提交查询时,代理节点会将其分发到包含相关数据段的适当服务器节点。服务器节点处理查询并将结果返回给代理节点,代理节点聚合结果后发送回客户端。这种分布式查询处理确保了查询的高效快速执行。
4. 安装 Pinot
我们可以通过 Docker、Kubernetes 或直接在本地机器上安装 Pinot。官方文档 提供了各种安装方法的详细说明。这里我们使用 Docker 进行安装。
通过 Docker 安装 Pinot 需要满足以下条件:
- 机器上必须安装 Docker
- Docker 内存需配置为:至少 4 CPU、16GB 内存、4GB 交换空间和 60GB 磁盘镜像大小
设置并运行 Docker 后,在终端执行以下命令获取最新镜像:
docker pull apachepinot/pinot:latest
5. 结论
本教程介绍了 Apache Pinot 的基础知识并探讨了其架构。Apache Pinot 是实时分析领域的领先数据存储系统,使组织能够即时处理和分析海量数据。其可扩展架构、低延迟查询和多功能性使其成为企业的首选方案。
随着对实时洞察的需求不断增长,Apache Pinot 正在推动数字领域的创新与变革。