前言

Apache Pulsar 自带了单机部署模式(Standalone),方便同学们快速体验 Pulsar 的魅力。当然,如果你想要一套接近生产,却又不想“陷入”生产的轻量级集群环境,那你来对地方了:新鲜出炉的 pulsar-pseudo-cluster [1] 项目,帮助你一键完成一个单节点伪分布式集群的搭建。

使用非常简单(主要就一个 shell 脚本,能不简单吗 😂)。首先将项目 clone 下来,然后把安装包放进同一个目录,最后执行脚本(deploy.sh)。这时候你就可以喝杯咖啡或者打杯水,回来的时候,脚本已经完成集群的安装和测试了。

  1. # Clone this repo
  2. $ git clone https://github.com/futeng/pulsar-pseudo-cluster.git
  3. $ cd pulsar-pseudo-cluster/
  4. # Put your apache-pulsar tarball in the `pulsar-pseudo-cluster` directory (keep in same directory)
  5. # for example download from CDN (take version of 2.9.1)
  6. $ wget https://dlcdn.apache.org/pulsar/pulsar-2.9.1/apache-pulsar-2.9.1-bin.tar.gz --no-check-certificate
  7. # Just execute the deployment script
  8. $ 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 准备情况和端口是否冲突等,排除潜在问题。端口选择了不常用,但是有规律的组合,方便大家后续使用。

  1. ====> Start to (re)deploy the pseudo-cluster of pulsar <====
  2. [1/9][√] Your OS is ready => Mac OS
  3. [2/9][√] Your JDK is ready => 1.8.0_311. Please check the version conflicts with Pulsar manually(JDK11+ is recommend).
  4. [3/9][√] Your Pulsar tarball is ready => apache-pulsar-2.8.2-bin.tar.gz
  5. [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
  6. [5/9][√] Please check the disk's remaining capacity manually. It's should remaining more than 95%.

接下来就是 3 个节点的 Zookeeper 伪分布式集群的安装。使用的就是 Pulsar 自带的嵌入版本,不用额外下载 Zookeeper 啦。

  1. doing start zookeeper ...
  2. doing start zookeeper ...
  3. doing start zookeeper ...
  4. [2022-03-24 11:34:27] [6/9][√] Your Zookeeper pseudo-cluster is all ready.

待 Zookeeper 检测无误后,会初始化 Pulsar 集群的元数据。

  1. [2022-03-24 11:34:27] [7/9][√] Your cluster metadata initialized in Zookeeper is ready.
  2. [2022-03-24 11:34:27] [8/9][√] Your cluster metadata test is ready. =>
  3. {"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 集群的搭建。

  1. doing start bookie ...
  2. doing start bookie ...
  3. doing start bookie ...
  4. [2022-03-24 11:34:27] [9/9][√] Your bookies is all ready.

Bookie 会做简单的 simpletest。接下来自然是 Broker 节点的启动。

  1. doing start broker ...
  2. doing start broker ...
  3. doing start broker ...

一切就绪后,会做基本的集群、租户和命名空间的创建和查看。当然,更不会少了 pub-sub 测试。

  1. [ list brokers ] -> pulsar-1/bin/pulsar-admin brokers list pulsar_pseudo_cluster
  2. "127.0.0.1:28080"
  3. "127.0.0.1:18080"
  4. [ leader-broker ] -> pulsar-1/bin/pulsar-admin brokers leader-broker
  5. {
  6. "serviceUrl" : "http://127.0.0.1:18080"
  7. }
  8. [ create local cluster ] -> pulsar-1/bin/pulsar-admin clusters create pulsar_pseudo_cluster
  9. [ create tenant ] -> pulsar-1/bin/pulsar-admin tenants create t1 -c pulsar_pseudo_cluster
  10. [ create tenant/namespaces ] -> pulsar-1/bin/pulsar-admin namespaces create t1/ns1 -c pulsar_pseudo_cluster
  11. [ create second cluster ] -> pulsar-1/bin/pulsar-admin clusters create cluster_2
  12. [ create second tenant ] -> pulsar-1/bin/pulsar-admin tenants create t2 -c cluster_2
  13. [ create second tenant/namespaces ] -> pulsar-1/bin/pulsar-admin namespaces create t2/ns2 -c cluster_2
  14. [ list tenants ] -> pulsar-1/bin/pulsar-admin tenants list
  15. "t1"
  16. "t2"
  17. [ list tenant's namespaces ] -> pulsar-1/bin/pulsar-admin namespaces list t1
  18. "t1/ns1"
  19. [ get tenant's clusters ] -> pulsar-1/bin/pulsar-admin namespaces get-clusters t1/ns1
  20. "pulsar_pseudo_cluster"
  21. [pulsar-client produce][√] 10 messages successfully produced
  22. [pulsar-client consume] Now it's your turn to test. Please execute consume command like:
  23. pulsar-1/bin/pulsar-client consume persistent://t1/ns1/test -n 10 -s "consumer-test" -t "Exclusive" -p "Earliest"
  24. _ _ _ ______ _ _
  25. | | | |(_) | ___ \ | | | |
  26. | |_| | _ | |_/ /_ _ | | ___ __ _ _ __ | |
  27. | _ || | | __/| | | || |/ __| / _` || '__|| |
  28. | | | || | _ | | | |_| || |\__ \| (_| || | |_|
  29. \_| |_/|_|( ) \_| \__,_||_||___/ \__,_||_| (_)
  30. |/

当你收到 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