GitHub链接
docker-sample/pulsar at master · perayb/docker-sample · GitHub
准备工作
- 安装最新版本的docker
- 拉取pulsar和pulsar-manager镜像
docker pull apachepulsar/pulsar:2.7.2
docker pull apachepulsar/pulsar-manager:v0.2.0
部署流程
standalone方式部署
启动容器:
sh startStandalone.sh
等待pulsar-manager
启动完成后,初始化管理员信息:
sh initAccount.sh
显示以下内容说明管理员信息初始化成功:
> sh initAccount.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 36 100 36 0 0 130 0 --:--:-- --:--:-- --:--:-- 130
{"message":"Add super user success, please login"}%
管理员信息初始化完成后,可从以下地址登入:
pulsar-manager: http://127.0.0.1:9527/#
username:
admin
, password:pulsar
构建成功后,点击 Clusters -> Cluster Name: standalone -> BROKERS ,可看到broker列表说明standalone
方式部署完成
删除容器:
sh stopStandalone.sh
standalone方式容器说明
pulsar-standalone
容器
- 配置了集群url地址为`pulsar-standalone`(便于`pulsar-manager`容器管理)
- 未挂载数据盘,每次启动均为新实例
docker run -itd \
--name pulsar-standalone \
-p 6650:6650 \
-p 8080:8080 \
apachepulsar/pulsar:2.7.2 \
sh -c "bin/pulsar standalone > pulsar.log 2>&1 & \
sleep 30 && bin/pulsar-admin clusters update standalone \
--url http://pulsar-standalone:8080 \
--broker-url pulsar://pulsar-standalone:6650 & \
tail -F pulsar.log"
pulsar-manager
容器
- 配置了默认集群环境
- 修改容器日志为`后端日志`
docker run -itd \
--name pulsar-manager \
-p 9527:9527 -p 7750:7750 \
-e SPRING\_CONFIGURATION\_FILE=/pulsar-manager/pulsar-manager/application.properties \
--link pulsar-standalone \
--entrypoint="" \
apachepulsar/pulsar-manager:v0.2.0 \
sh -c "sed -i '/^default.environment.name/ s|.\*|default.environment.name=pulsar-standalone|' /pulsar-manager/pulsar-manager/application.properties & \
sed -i '/^default.environment.service\_url/ s|.\*|default.environment.service\_url=http://pulsar-standalone:8080|' /pulsar-manager/pulsar-manager/application.properties & \
/pulsar-manager/entrypoint.sh & \
tail -F /pulsar-manager/pulsar-manager/pulsar-manager.log"
cluster方式部署
启动集群(自动新建初始化数据目录data
):
sh startCluster.sh
等待pulsar-manager
启动完成后,初始化管理员信息:
sh initAccount.sh
显示以下内容说明管理员信息初始化成功:
> sh initAccount.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 36 100 36 0 0 130 0 --:--:-- --:--:-- --:--:-- 130
{"message":"Add super user success, please login"}%
管理员信息初始化完成后,可从以下地址登入:
- Pulsar Manager
> http://127.0.0.1:9527/#_
> username: `admin`, password: `pulsar`
- BookKeeper Visual Manager
> http://127.0.0.1:7750/bkvm/#/login_
> username: `admin`, password: `admin`
构建成功后,以下两个页面正常说明cluster
方式部署完成
- 点击 Clusters -> Cluster Name: pulsar-cluster-1 -> BROKERS ,可看到broker列表
- 进入
BookKeeper Visual Manager
可看到3个BookKeeper节点
删除集群(删除容器,保留数据目录):
sh stopCluster.sh
停止和启动集群(保留容器):
# 停止容器
docker compose -f docker-compose-cluster.yml stop
# 启动容器
docker compose -f docker-compose-cluster.yml start
cluster方式容器说明
容器启动流程如下:
Zookeeper节点(zk1, zk2, zk3)
-> 初始化集群元数据(init-metadata)
-> Bookeeper节点(bookie1, bookie2, bookie3)
-> puslar broker节点(broker1, broker2, broker3)
-> 反向代理节点(pulsar-proxy)
-> pulsar manager节点(dashboard)
配置文件参考conf
目录,数据目录为data
,具体参考docker-compose-cluster.yml
所有容器的重启策略为失败后重启
restart: on-failure
日志均可通过docker logs <container-name>
查看
使用客户端与 pulsar 交互测试验证
pulsar 支持多种语言的 Client API, 不过个人推荐使用基于 Python 的 Client API, 可以通过编写简短的代码,即可完成与 pulsar 的交互和测试验证。地址: client-libraries-python
Producer example script
import pulsar
client = pulsar.Client('pulsar://localhost:6650')
producer = client.create_producer('my-topic')
for i in range(10):
producer.send(('Hello-%d' % i).encode('utf-8'))
client.close()
Consumer example script
import pulsar
client = pulsar.Client('pulsar://localhost:6650')
consumer = client.subscribe('my-topic', 'my-subscription')
while True:
msg = consumer.receive()
try:
print("Received message '{}' id='{}'".format(msg.data(), msg.message_id()))
# Acknowledge successful processing of the message
consumer.acknowledge(msg)
except Exception:
# Message failed to be processed
consumer.negative_acknowledge(msg)
client.close()