首页
/ Apache Pinot Docker Compose部署指南:构建实时分析环境

Apache Pinot Docker Compose部署指南:构建实时分析环境

2025-07-08 04:37:25作者:冯爽妲Honey

Apache Pinot是一个开源的分布式OLAP数据存储系统,专为低延迟、高吞吐量的分析查询而设计。本文将详细介绍如何使用Docker Compose快速部署一个完整的Pinot开发环境。

环境架构概述

这个Docker Compose配置定义了一个完整的Pinot集群,包含以下核心组件:

  1. Zookeeper:作为分布式协调服务,管理Pinot集群的元数据和状态
  2. Kafka:作为实时数据流管道,用于向Pinot导入实时数据
  3. Pinot Controller:集群管理节点,负责表管理、任务协调等
  4. Pinot Broker:查询路由节点,接收查询请求并分发到各个Server
  5. 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端口用于管理

部署与使用指南

  1. 准备环境

    • 确保已安装Docker和Docker Compose
    • 创建必要的本地目录结构(pinot-docker-demo下的各子目录)
  2. 启动集群

    docker-compose up -d
    
  3. 验证服务

    • 访问Controller管理界面:http://localhost:9000
    • 检查各容器日志确保无错误
  4. 数据导入

    • 通过Kafka发送实时数据
    • 或使用Controller API导入离线数据
  5. 执行查询

    • 通过Broker的查询接口执行SQL查询

生产环境注意事项

此配置适合开发测试环境,生产环境需要考虑:

  1. 增加各组件实例数量实现高可用
  2. 配置更完善的安全机制
  3. 调整资源限制(CPU/内存)
  4. 设置监控告警系统
  5. 考虑使用更持久化的存储方案

版本兼容性说明

本配置使用Pinot 0.7.1版本,与其他组件版本兼容性良好。升级版本时需注意:

  • 检查新版本特性
  • 验证与Zookeeper/Kafka的兼容性
  • 评估是否需要数据迁移

通过这个Docker Compose配置,开发者可以快速搭建一个功能完整的Pinot开发环境,体验其强大的实时分析能力。