Apache Pulsar容器化部署:Docker Compose快速入门

Apache Pulsar容器化部署:Docker Compose快速入门

【免费下载链接】pulsar 【免费下载链接】pulsar 项目地址: https://gitcode.com/gh_mirrors/pu/pulsar

你是否还在为消息队列的集群部署而烦恼?是否觉得传统部署流程复杂且容易出错?本文将带你通过Docker Compose快速搭建一个功能完备的Apache Pulsar集群,无需复杂的环境配置,让你轻松上手这个强大的分布式消息系统。

读完本文,你将能够:

  • 理解Pulsar集群的基本架构和组件
  • 使用Docker Compose一键部署完整的Pulsar集群
  • 验证集群部署并进行简单的消息生产和消费测试
  • 了解基本的集群管理和监控方法

Pulsar集群架构概览

Apache Pulsar是一个多租户、高性能的服务器到服务器消息传递系统,采用了分层架构设计,主要由以下组件构成:

  • ZooKeeper集群:负责配置管理、集群协调和元数据存储
  • BookKeeper集群:提供持久化存储服务,用于存储消息数据
  • Pulsar Broker集群:处理消息的发布和订阅,实现消息路由和负载均衡
  • Pulsar Proxy:提供统一的接入点,简化客户端连接
  • Pulsar Functions Worker:用于运行Pulsar Functions,实现流处理功能

下面是Pulsar集群的基本架构图:

mermaid

准备工作

在开始部署之前,请确保你的环境满足以下要求:

  • Docker Engine (19.03.0+)
  • Docker Compose (2.0+)
  • 至少4GB可用内存
  • 至少20GB可用磁盘空间

如果你还没有安装Docker和Docker Compose,可以参考官方文档进行安装。

获取Pulsar源码

首先,我们需要获取Pulsar的源码,其中包含了Docker Compose的配置文件:

git clone https://gitcode.com/gh_mirrors/pu/pulsar.git
cd pulsar

Docker Compose配置文件解析

Pulsar源码中提供了一个完整的Docker Compose示例配置,位于docker-compose/kitchen-sink/docker-compose.yml。这个配置文件定义了一个包含3个ZooKeeper节点、3个BookKeeper节点、3个Broker节点以及Proxy、Functions Worker等组件的完整Pulsar集群。

下面是该配置文件的主要内容解析:

网络配置

networks:
  pulsar:
    driver: bridge

定义了一个名为pulsar的桥接网络,所有服务都将连接到这个网络,实现内部通信。

ZooKeeper集群配置

zk1:
  container_name: zk1
  hostname: zk1
  image: apachepulsar/pulsar-all:latest
  command: |
    bash -c "bin/apply-config-from-env.py conf/zookeeper.conf && \
             bin/apply-config-from-env.py conf/pulsar_env.sh && \
             bin/generate-zookeeper-config.sh conf/zookeeper.conf && \
             exec bin/pulsar zookeeper"
  environment:
    ZOOKEEPER_SERVERS: zk1,zk2,zk3
    PULSAR_MEM: -Xmx128m
  networks:
    pulsar:

配置了3个ZooKeeper节点(zk1, zk2, zk3),使用apachepulsar/pulsar-all:latest镜像,通过环境变量设置JVM内存和ZooKeeper集群信息。

BookKeeper集群配置

bk1:
  hostname: bk1
  container_name: bk1
  image: apachepulsar/pulsar-all:latest
  command: |-
    bash -c "export dbStorage_writeCacheMaxSizeMb="${dbStorage_writeCacheMaxSizeMb:-16}" && \
             export dbStorage_readAheadCacheMaxSizeMb="${dbStorage_readAheadCacheMaxSizeMb:-16}" && \
             bin/apply-config-from-env.py conf/bookkeeper.conf && \
             { bin/update-rocksdb-conf-from-env || true; } && \
             bin/apply-config-from-env.py conf/pulsar_env.sh && \
             bin/watch-znode.py -z $$zkServers -p /initialized-$$clusterName -w && \
             exec bin/pulsar bookie"
  environment:
    clusterName: test
    zkServers: zk1:2181,zk2:2181,zk3:2181
    numAddWorkerThreads: 8
    useHostNameAsBookieID: "true"
    BOOKIE_MEM: -Xmx256m
  depends_on:
    - zk1
    - zk2
    - zk3
    - pulsar-init
  networks:
    pulsar:

配置了3个BookKeeper节点(bk1, bk2, bk3),同样使用apachepulsar/pulsar-all:latest镜像,设置了存储缓存大小、工作线程数等参数。

Broker集群配置

broker1:
  hostname: broker1
  container_name: broker1
  image: apachepulsar/pulsar-all:latest
  restart: on-failure
  command: |
    bash -c "bin/apply-config-from-env.py conf/broker.conf && \
             bin/apply-config-from-env.py conf/pulsar_env.sh && \
             bin/watch-znode.py -z $$zookeeperServers -p /initialized-$$clusterName -w && \
             exec bin/pulsar broker"
  environment:
    clusterName: test
    zookeeperServers: zk1:2181,zk2:2181,zk3:2181
    configurationStore: zk1:2181,zk2:2181,zk3:2181
    webSocketServiceEnabled: "false"
    functionsWorkerEnabled: "false"
    PULSAR_MEM: -Xmx256m
  depends_on:
    - zk1
    - zk2
    - zk3
    - pulsar-init
    - bk1
    - bk2
    - bk3
  networks:
    pulsar:

配置了3个Broker节点(broker1, broker2, broker3),设置了ZooKeeper连接信息、内存大小等参数。

Proxy配置

proxy1:
  hostname: proxy1
  container_name: proxy1
  restart: on-failure
  image: apachepulsar/pulsar-all:latest
  command: |
    bash -c "bin/apply-config-from-env.py conf/proxy.conf && \
             bin/apply-config-from-env.py conf/pulsar_env.sh && \
             bin/watch-znode.py -z $$zookeeperServers -p /initialized-$$clusterName -w && \
             exec bin/pulsar proxy"
  environment:
    clusterName: test
    zookeeperServers: zk1:2181,zk2:2181,zk3:2181
    configurationStoreServers: zk1:2181,zk2:2181,zk3:2181
    webSocketServiceEnabled: "true"
    functionWorkerWebServiceURL: http://fnc1:6750
    PULSAR_MEM: -Xmx256m
  ports:
    - "6650:6650"
    - "8080:8080"
  depends_on:
    - zk1
    - zk2
    - zk3
    - pulsar-init
    - bk1
    - bk2
    - bk3
    - broker1
  networks:
    pulsar:

配置了一个Proxy节点,暴露了6650(Pulsar协议端口)和8080(HTTP管理端口),供外部客户端连接使用。

启动Pulsar集群

完成对配置文件的了解后,我们可以开始启动Pulsar集群了。进入Docker Compose配置文件所在目录,并执行启动命令:

cd docker-compose/kitchen-sink
docker-compose up -d

这个命令会后台启动所有定义的服务。首次启动时,Docker会自动拉取所需的镜像,这个过程可能需要几分钟时间,请耐心等待。

启动完成后,可以使用以下命令查看所有服务的运行状态:

docker-compose ps

如果所有服务都显示为"Up"状态,则说明集群启动成功。

验证集群部署

集群启动成功后,我们需要进行一些简单的验证,确保集群能够正常工作。

查看集群状态

首先,我们可以通过Pulsar Admin CLI工具查看集群的基本状态:

docker exec -it proxy1 bin/pulsar-admin clusters list

如果一切正常,你应该能看到类似以下的输出:

test

这表示集群中存在一个名为"test"的集群。

创建命名空间和主题

接下来,我们创建一个测试用的命名空间和主题:

# 创建命名空间
docker exec -it proxy1 bin/pulsar-admin namespaces create public/test
# 创建主题
docker exec -it proxy1 bin/pulsar-admin topics create persistent://public/test/my-topic

生产和消费消息

现在,我们可以进行简单的消息生产和消费测试。首先,打开一个新的终端窗口,启动一个消费者:

docker exec -it proxy1 bin/pulsar-client consume -s "test-subscription" persistent://public/test/my-topic -n 0

这个命令会启动一个消费者,订阅名为"persistent://public/test/my-topic"的主题,并持续接收消息(-n 0表示不限制消息数量)。

然后,在原来的终端窗口中,启动一个生产者,发送一些测试消息:

docker exec -it proxy1 bin/pulsar-client produce persistent://public/test/my-topic -m "Hello, Pulsar!" -n 5

这个命令会向指定主题发送5条内容为"Hello, Pulsar!"的消息。

此时,你应该能在消费者所在的终端窗口中看到接收到的消息,类似以下输出:

----- got message -----
Hello, Pulsar!
----- got message -----
Hello, Pulsar!
----- got message -----
Hello, Pulsar!
----- got message -----
Hello, Pulsar!
----- got message -----
Hello, Pulsar!

这表明集群已经能够正常处理消息的生产和消费。

监控集群状态

Pulsar提供了内置的监控功能,我们可以通过Web界面查看集群的运行状态。

访问Pulsar Dashboard

Pulsar Proxy默认暴露了8080端口作为HTTP管理端口,我们可以通过浏览器访问以下地址来打开Pulsar Dashboard:

http://localhost:8080/admin/

在Dashboard中,你可以查看集群的各种指标,包括主题信息、消息吞吐量、 broker状态等。

使用Grafana监控

Pulsar源码中还提供了Grafana的配置文件,可以帮助你更直观地监控集群状态。相关配置文件位于grafana/目录下。

要使用Grafana监控,你需要额外部署Grafana和Prometheus,具体步骤可以参考grafana/README.md文件中的说明。

停止集群

当你需要停止Pulsar集群时,可以执行以下命令:

cd docker-compose/kitchen-sink
docker-compose down

如果你希望在停止集群的同时删除所有数据(例如,进行干净的重新部署),可以加上-v参数:

docker-compose down -v

常见问题解决

服务启动失败

如果某些服务启动失败,可以通过查看日志来定位问题:

docker-compose logs -f <service-name>

例如,查看broker1的日志:

docker-compose logs -f broker1

内存不足

Pulsar集群对内存要求较高,如果你的环境内存不足,可能会导致服务启动失败或运行不稳定。你可以尝试修改docker-compose/kitchen-sink/docker-compose.yml文件中的内存配置,适当降低各个服务的内存分配。

例如,修改Broker的内存配置:

environment:
  PULSAR_MEM: -Xmx128m  # 将原来的256m改为128m

端口冲突

如果启动时提示端口冲突(例如,8080端口已被其他服务占用),你可以修改docker-compose/kitchen-sink/docker-compose.yml文件中的端口映射,将冲突的端口映射到主机的其他端口。

例如,修改Proxy的端口映射:

ports:
  - "6650:6650"
  - "8081:8080"  # 将原来的8080:8080改为8081:8080

总结

通过本文的介绍,你已经了解了如何使用Docker Compose快速部署一个完整的Apache Pulsar集群,并进行了简单的验证测试。Pulsar作为一个功能强大的分布式消息系统,还有很多高级特性值得探索,例如:

  • Pulsar Functions:轻量级流处理功能
  • Pulsar IO:连接外部系统的连接器框架
  • 多租户支持:细粒度的资源隔离和权限控制
  • 分层存储:将冷数据自动迁移到低成本存储

希望本文能够帮助你快速上手Pulsar,如果你想深入了解更多Pulsar的高级特性,可以参考官方文档或README.md文件。

如果你觉得本文对你有帮助,请点赞、收藏并关注我们,以便获取更多关于Pulsar的实用教程和最佳实践。下期我们将介绍如何使用Pulsar Functions构建简单的流处理应用,敬请期待!

【免费下载链接】pulsar 【免费下载链接】pulsar 项目地址: https://gitcode.com/gh_mirrors/pu/pulsar

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值