Apache Pulsar容器化部署:Docker Compose快速入门
【免费下载链接】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集群的基本架构图:
准备工作
在开始部署之前,请确保你的环境满足以下要求:
- 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 项目地址: https://gitcode.com/gh_mirrors/pu/pulsar
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



