前言
Apache Pulsar 自带了单机部署模式(Standalone),方便同学们快速体验 Pulsar 的魅力。当然,如果你想要一套接近生产,却又不想“陷入”生产的轻量级集群环境,那你来对地方了:新鲜出炉的 pulsar-pseudo-cluster [1] 项目,帮助你一键完成一个单节点伪分布式集群的搭建。
使用非常简单(主要就一个 shell 脚本,能不简单吗 😂)。首先将项目 clone 下来,然后把安装包放进同一个目录,最后执行脚本(deploy.sh
)。这时候你就可以喝杯咖啡或者打杯水,回来的时候,脚本已经完成集群的安装和测试了。
# Clone this repo
$ git clone https://github.com/futeng/pulsar-pseudo-cluster.git
$ cd pulsar-pseudo-cluster/
# Put your apache-pulsar tarball in the `pulsar-pseudo-cluster` directory (keep in same directory)
# for example download from CDN (take version of 2.9.1)
$ wget https://dlcdn.apache.org/pulsar/pulsar-2.9.1/apache-pulsar-2.9.1-bin.tar.gz --no-check-certificate
# Just execute the deployment script
$ sh deploy.sh
支持
目前已经交叉测试了常用的几个 Pulsar 版本。更多的环境验证结果或者问题,欢迎大家向 repo 提交 issues。
HOST \ Apache Pulsar | 2.9.1 | 2.8.2 | 2.7.4 | 2.6.1 |
---|---|---|---|---|
CentOS 7.5 + jdk 11 | √ | √ | √ | √ |
CentOS 7.5 + jdk1.8 | √ | √ | √ | √ |
MacOS 12.2.1 M1 + jdk 1.8 | √ | √ | √ | √ |
脚本做了什么
我们从打印的部分日志来简单解读下。
脚本会分步骤检测包括操作系统的版本、JDK 安装情况、Pulsar tarball 准备情况和端口是否冲突等,排除潜在问题。端口选择了不常用,但是有规律的组合,方便大家后续使用。
====> Start to (re)deploy the pseudo-cluster of pulsar <====
[1/9][√] Your OS is ready => Mac OS
[2/9][√] Your JDK is ready => 1.8.0_311. Please check the version conflicts with Pulsar manually(JDK11+ is recommend).
[3/9][√] Your Pulsar tarball is ready => apache-pulsar-2.8.2-bin.tar.gz
[4/9][√] Your Ports are ready => Port list: 12181|22181|32181|19990|29990|39990|18001|18002|18003|18004|18005|18006|12888|13888|22888|23888|32888|33888|18443|28443|38443|16650|26650|36650|13181|23181|33181|18080|28080|38080|16651|26651|36651
[5/9][√] Please check the disk's remaining capacity manually. It's should remaining more than 95%.
接下来就是 3 个节点的 Zookeeper 伪分布式集群的安装。使用的就是 Pulsar 自带的嵌入版本,不用额外下载 Zookeeper 啦。
doing start zookeeper ...
doing start zookeeper ...
doing start zookeeper ...
[2022-03-24 11:34:27] [6/9][√] Your Zookeeper pseudo-cluster is all ready.
待 Zookeeper 检测无误后,会初始化 Pulsar 集群的元数据。
[2022-03-24 11:34:27] [7/9][√] Your cluster metadata initialized in Zookeeper is ready.
[2022-03-24 11:34:27] [8/9][√] Your cluster metadata test is ready. =>
{"serviceUrl":"http://127.0.0.1:12181:18080","serviceUrlTls":"https://127.0.0.1:12181:18443","brokerServiceUrl":"pulsar://127.0.0.1:12181:16650","brokerServiceUrlTls":"pulsar+ssl://127.0.0.1:12181:16651","brokerClientTlsEnabled":false,"tlsAllowInsecureConnection":false,"brokerClientTlsEnabledWithKeyStore":false,"brokerClientTlsTrustStoreType":"JKS"}
一切都没有问题了,开始 BookKeeper 集群的搭建。
doing start bookie ...
doing start bookie ...
doing start bookie ...
[2022-03-24 11:34:27] [9/9][√] Your bookies is all ready.
Bookie 会做简单的 simpletest。接下来自然是 Broker 节点的启动。
doing start broker ...
doing start broker ...
doing start broker ...
一切就绪后,会做基本的集群、租户和命名空间的创建和查看。当然,更不会少了 pub-sub 测试。
[ list brokers ] -> pulsar-1/bin/pulsar-admin brokers list pulsar_pseudo_cluster
"127.0.0.1:28080"
"127.0.0.1:18080"
[ leader-broker ] -> pulsar-1/bin/pulsar-admin brokers leader-broker
{
"serviceUrl" : "http://127.0.0.1:18080"
}
[ create local cluster ] -> pulsar-1/bin/pulsar-admin clusters create pulsar_pseudo_cluster
[ create tenant ] -> pulsar-1/bin/pulsar-admin tenants create t1 -c pulsar_pseudo_cluster
[ create tenant/namespaces ] -> pulsar-1/bin/pulsar-admin namespaces create t1/ns1 -c pulsar_pseudo_cluster
[ create second cluster ] -> pulsar-1/bin/pulsar-admin clusters create cluster_2
[ create second tenant ] -> pulsar-1/bin/pulsar-admin tenants create t2 -c cluster_2
[ create second tenant/namespaces ] -> pulsar-1/bin/pulsar-admin namespaces create t2/ns2 -c cluster_2
[ list tenants ] -> pulsar-1/bin/pulsar-admin tenants list
"t1"
"t2"
[ list tenant's namespaces ] -> pulsar-1/bin/pulsar-admin namespaces list t1
"t1/ns1"
[ get tenant's clusters ] -> pulsar-1/bin/pulsar-admin namespaces get-clusters t1/ns1
"pulsar_pseudo_cluster"
[pulsar-client produce][√] 10 messages successfully produced
[pulsar-client consume] Now it's your turn to test. Please execute consume command like:
pulsar-1/bin/pulsar-client consume persistent://t1/ns1/test -n 10 -s "consumer-test" -t "Exclusive" -p "Earliest"
_ _ _ ______ _ _
| | | |(_) | ___ \ | | | |
| |_| | _ | |_/ /_ _ | | ___ __ _ _ __ | |
| _ || | | __/| | | || |/ __| / _` || '__|| |
| | | || | _ | | | |_| || |\__ \| (_| || | |_|
\_| |_/|_|( ) \_| \__,_||_||___/ \__,_||_| (_)
|/
当你收到 Hi, Pulsar! 的打印,你就知道,集群已经准备好了。
特性和场景
话说,现在连一个脚本都会站出来说自己有什么特性了吗!逃…
特性还是有的。简单的说,每次执行 deploy.sh
命令,都会关闭进程、清空数据。这时候你会发现,把原先的 tar 包替换成别的版本,一键启动,一个新版本的集群就诞生啦。好厉害呢。
最后
一个接近生产的伪分布式集群,能随时拉起和关闭,还能一键切换版本,这会给日常测试提供不小的便利。
欢迎大家下载使用,有任何问题都可以跟 repo 主在线交流。
这里还有个使用视频 「可以一键部署 Pulsar 伪分布式集群啦」[2],可以瞅瞅。
参考
[1] pulsar-pseudo-cluster 项目地址:https://github.com/futeng/pulsar-pseudo-cluster
[2] 可以一键部署 Pulsar 伪分布式集群啦:https://m.bilibili.com/video/BV1rU4y1d7c7