首页
/ Apache Pinot Docker镜像构建与部署指南

Apache Pinot Docker镜像构建与部署指南

2025-07-08 04:35:56作者:廉彬冶Miranda

概述

Apache Pinot是一个实时分布式OLAP数据存储系统,专为低延迟分析查询而设计。本文将详细介绍如何构建、发布和运行Pinot的Docker镜像,帮助开发者快速搭建Pinot环境。

Docker镜像构建

构建脚本使用

Pinot项目提供了docker-build.sh脚本用于构建Docker镜像,该脚本支持多种参数配置:

./docker-build.sh [Docker Tag] [Git Branch] [Pinot Git URL] [Kafka Version] [Java Version] [JDK Version] [OpenJDK Image]

参数说明:

  • Docker Tag:镜像标签,默认为pinot:latest
  • Git Branch:要构建的Pinot分支,默认为master
  • Pinot Git URL:Pinot仓库地址,默认为官方仓库
  • Kafka Version:构建Pinot时使用的Kafka版本,默认为2.0
  • Java Version:Java构建和运行时版本,默认为11
  • JDK Version:Maven构建参数,默认为11
  • OpenJDK Image:基础镜像,默认为openjdk

构建示例

  1. 构建自定义分支的快照版本:
./docker-build.sh pinot_fork:snapshot-5.2 snapshot-5.2 https://your_own_fork/pinot.git
  1. 构建正式发布版本:
./docker-build.sh pinot:release-0.1.0 release-0.1.0 https://apache/pinot.git

ARM64架构支持

对于使用Mac M1芯片的用户,需要指定ARM64架构的基础镜像:

./docker-build.sh pinot:latest master https://apache/pinot.git 2.0 11 11 arm64v8/openjdk

或在非ARM64机器上通过指定平台构建:

docker build -t pinot:latest --platform linux/arm64 --no-cache --network=host --build-arg OPENJDK_IMAGE=arm64v8/openjdk -f Dockerfile .

Docker镜像发布

发布脚本使用

docker-push.sh脚本用于将构建好的镜像推送到Docker仓库:

./docker-push.sh apachepinot/pinot:latest

构建并发布

docker-build-and-push.sh脚本可以一次性完成构建和发布:

./docker-build-and-push.sh apachepinot/pinot:latest master https://apache/pinot.git

运行Pinot组件

启动Zookeeper

Pinot依赖Zookeeper进行协调服务:

docker pull zookeeper
docker run --name pinot-zookeeper --restart always -p 2181:2181 zookeeper

获取Zookeeper地址:

docker inspect pinot-zookeeper | grep IPAddress

启动Pinot组件

  1. 控制器(Controller):
docker run -p 9000:9000 pinot:release-0.1.0 StartController -zkAddress 172.17.0.2:2181
  1. 代理(Broker):
docker run -p 8099:8099 pinot:release-0.1.0 StartBroker -zkAddress 172.17.0.2:2181
  1. 服务器(Server):
docker run -p 8098:8098 pinot:release-0.1.0 StartServer -zkAddress 172.17.0.2:2181

快速入门

使用Docker Compose启动完整环境

Pinot提供了docker-compose.yml文件,可一键启动包含Zookeeper、Kafka和Pinot组件的完整环境:

docker-compose -f docker-compose.yml up

创建表并加载数据

  1. 创建表:
docker run --network=pinot_default apachepinot/pinot:release-0.7.1 AddTable \
  -schemaFile examples/stream/airlineStats/airlineStats_schema.json \
  -tableConfigFile examples/stream/airlineStats/docker/airlineStats_realtime_table_config.json \
  -controllerHost pinot-controller -controllerPort 9000 -exec
  1. 向Kafka导入数据:
docker run --network=pinot_default apachepinot/pinot:release-0.7.1 StreamAvroIntoKafka \
  -avroFile examples/stream/airlineStats/sample_data/airlineStats_data.avro \
  -kafkaTopic flights-realtime -kafkaBrokerList kafka:9092 -zkAddress zookeeper:2181

完成上述步骤后,可通过浏览器访问localhost:9000进行查询操作。

最佳实践

  1. 版本管理:建议为每个环境使用特定版本的镜像标签,避免使用latest标签在生产环境。

  2. 资源分配:根据数据量大小适当调整Docker容器的内存和CPU限制。

  3. 网络配置:在生产环境中,建议使用自定义网络而非默认的bridge网络。

  4. 持久化存储:为Zookeeper和Pinot Server配置持久化卷,防止数据丢失。

  5. 监控:集成Prometheus等监控工具,实时监控Pinot集群状态。

通过本文介绍的Docker部署方式,开发者可以快速搭建Pinot环境进行开发和测试,同时也为生产环境部署提供了基础参考。