Apache Pinot Docker Compose部署指南:构建实时分析环境
2025-07-08 04:37:25作者:冯爽妲Honey
Apache Pinot是一个开源的分布式OLAP数据存储系统,专为低延迟、高吞吐量的分析查询而设计。本文将详细介绍如何使用Docker Compose快速部署一个完整的Pinot开发环境。
环境架构概述
这个Docker Compose配置定义了一个完整的Pinot集群,包含以下核心组件:
- Zookeeper:作为分布式协调服务,管理Pinot集群的元数据和状态
- Kafka:作为实时数据流管道,用于向Pinot导入实时数据
- Pinot Controller:集群管理节点,负责表管理、任务协调等
- Pinot Broker:查询路由节点,接收查询请求并分发到各个Server
- Pinot Server:数据存储和查询执行节点
详细组件配置解析
Zookeeper配置
zookeeper:
image: zookeeper:latest
hostname: zookeeper
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_PORT: 2181
ZOO_SERVERS: server.1=zookeeper:2888:3888;2181
volumes:
- ./pinot-docker-demo/zookeeper/data:/data
- ./pinot-docker-demo/zookeeper/datalog:/datalog
Zookeeper是Pinot集群的核心依赖,负责存储所有元数据信息。配置中:
- 使用最新版Zookeeper镜像
- 暴露2181端口供集群内其他组件访问
- 配置了数据持久化卷,确保重启后数据不丢失
- 设置了单节点集群配置(适合开发环境)
Kafka配置
kafka:
image: confluentinc/cp-kafka:5.3.0
hostname: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka:19092,LISTENER_DOCKER_EXTERNAL://kafka:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181/kafka"
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
volumes:
- ./pinot-docker-demo/kafka/data:/var/lib/kafka/data
depends_on:
- zookeeper
Kafka作为实时数据源,配置要点:
- 使用Confluent提供的5.3.0版本Kafka镜像
- 配置了内外两种监听器,便于容器内外访问
- 连接到之前配置的Zookeeper服务
- 设置了数据持久化卷
- 单节点配置(开发环境适用)
Pinot控制器配置
pinot-controller:
image: apachepinot/pinot:release-0.7.1
hostname: pinot-controller
volumes:
- ./pinot-docker-demo/pinot/controller:/tmp/data/controller
ports:
- "9000:9000"
command: StartController -zkAddress zookeeper:2181
depends_on:
- kafka
控制器是Pinot集群的大脑,负责:
- 集群管理
- 表管理
- 任务协调
- 暴露管理API(端口9000)
Pinot Broker配置
pinot-broker:
image: apachepinot/pinot:release-0.7.1
hostname: pinot-broker
ports:
- "8099:8099"
command: StartBroker -zkAddress zookeeper:2181
depends_on:
- zookeeper
- kafka
- pinot-controller
Broker节点功能:
- 接收客户端查询请求
- 将查询分发到适当的Server节点
- 合并结果返回给客户端
- 暴露8099端口供查询使用
Pinot Server配置
pinot-server:
image: apachepinot/pinot:release-0.7.1
hostname: pinot-server
volumes:
- ./pinot-docker-demo/pinot/server:/tmp/data/server
ports:
- "8098:8098"
command: StartServer -zkAddress zookeeper:2181
depends_on:
- zookeeper
- kafka
- pinot-controller
Server节点职责:
- 存储数据段(Segments)
- 执行查询处理
- 支持实时和离线数据摄入
- 暴露8098端口用于管理
部署与使用指南
-
准备环境:
- 确保已安装Docker和Docker Compose
- 创建必要的本地目录结构(pinot-docker-demo下的各子目录)
-
启动集群:
docker-compose up -d
-
验证服务:
- 访问Controller管理界面:http://localhost:9000
- 检查各容器日志确保无错误
-
数据导入:
- 通过Kafka发送实时数据
- 或使用Controller API导入离线数据
-
执行查询:
- 通过Broker的查询接口执行SQL查询
生产环境注意事项
此配置适合开发测试环境,生产环境需要考虑:
- 增加各组件实例数量实现高可用
- 配置更完善的安全机制
- 调整资源限制(CPU/内存)
- 设置监控告警系统
- 考虑使用更持久化的存储方案
版本兼容性说明
本配置使用Pinot 0.7.1版本,与其他组件版本兼容性良好。升级版本时需注意:
- 检查新版本特性
- 验证与Zookeeper/Kafka的兼容性
- 评估是否需要数据迁移
通过这个Docker Compose配置,开发者可以快速搭建一个功能完整的Pinot开发环境,体验其强大的实时分析能力。