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
构建示例
- 构建自定义分支的快照版本:
./docker-build.sh pinot_fork:snapshot-5.2 snapshot-5.2 https://your_own_fork/pinot.git
- 构建正式发布版本:
./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组件
- 控制器(Controller):
docker run -p 9000:9000 pinot:release-0.1.0 StartController -zkAddress 172.17.0.2:2181
- 代理(Broker):
docker run -p 8099:8099 pinot:release-0.1.0 StartBroker -zkAddress 172.17.0.2:2181
- 服务器(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
创建表并加载数据
- 创建表:
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
- 向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
进行查询操作。
最佳实践
-
版本管理:建议为每个环境使用特定版本的镜像标签,避免使用
latest
标签在生产环境。 -
资源分配:根据数据量大小适当调整Docker容器的内存和CPU限制。
-
网络配置:在生产环境中,建议使用自定义网络而非默认的bridge网络。
-
持久化存储:为Zookeeper和Pinot Server配置持久化卷,防止数据丢失。
-
监控:集成Prometheus等监控工具,实时监控Pinot集群状态。
通过本文介绍的Docker部署方式,开发者可以快速搭建Pinot环境进行开发和测试,同时也为生产环境部署提供了基础参考。