二进制和docker两种方式部署Apache pulsar(standalone)

#作者:闫乾苓

文章目录

  • 1、二进制安装部署Pulsar(standalone)
    • [1.1 安装配置JDK](#1.1 安装配置JDK)
    • [1.2 下载解压pulsar安装包](#1.2 下载解压pulsar安装包)
    • [1.3 启动独立模式的Pulsar 集群](#1.3 启动独立模式的Pulsar 集群)
    • [1.4 创建主题测试](#1.4 创建主题测试)
    • [1.5 向主题写入消息测试](#1.5 向主题写入消息测试)
    • [1.6 从主题中读取消息测试](#1.6 从主题中读取消息测试)
  • 2.docker安装部署Pulsar(standalone)
    • [2.1 使用docker 启动Pulsar](#2.1 使用docker 启动Pulsar)
    • [2.2 使用客户端API测试集群](#2.2 使用客户端API测试集群)

1、二进制安装部署Pulsar(standalone)

1.1 安装配置JDK

根据官方文档要求,需要安装合适的 64 位 JRE/JDK 版本。请参考Pulsar Runtime Java 版本建议

组件 Java 版本
Broker 17
Functions / IO 17
CLI 17
Java Client 8 or 11 or 17

Openjdk17下载地址:

https://adoptium.net/zh-CN/temurin/releases/?variant=openjdk17

复制代码
# 解压下载的安装包
[root@pulsar ~]# tar xf OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz -C /opt

# 配置软连接
[root@pulsar ~]# ln -s /opt/jdk-17.0.14+7/ /opt/openjdk-17

# 配置PATH环境
[root@pulsar ~]# cat >> /etc/profile << EOF
export JAVA_HOME=/opt/openjdk-17
export PATH=\$JAVA_HOME/bin:\$PATH
EOF

# 使PATH环境生效
[root@pulsar ~]# source /etc/profile

# 验证,能输出正确版本为配置成功
[root@pulsar ~]#  java -version
openjdk version "17.0.14" 2025-01-21
OpenJDK Runtime Environment Temurin-17.0.14+7 (build 17.0.14+7)
OpenJDK 64-Bit Server VM Temurin-17.0.14+7 (build 17.0.14+7, mixed mode, sharing)

1.2 下载解压pulsar安装包

复制代码
# 下载安装包
[root@pulsar ~]# wget https://archive.apache.org/dist/pulsar/pulsar-2.11.4/apache-pulsar-2.11.4-bin.tar.gz
# 解压到/opt
[root@pulsar ~]# tar xf apache-pulsar-2.11.4-bin.tar.gz -C /opt/

# 设置软连接
[root@pulsar opt]# ln -s /opt/apache-pulsar-2.11.4/ /opt/pulsar

1.3 启动独立模式的Pulsar 集群

复制代码
[root@pulsar ~]# cd /opt/pulsar/
[root@pulsar ~]# bin/pulsar standalone

Pulsar 集群启动时,会创建以下目录:

目录 描述
data BookKeeper 和 RocksDB 创建的所有数据
Log 所有服务器端日志
  • 要将服务作为后台进程运行,可以使用该bin/pulsar-daemon start standalone命令。
  • 命名空间public/default是在启动 Pulsar 集群时创建的。此命名空间用于开发目的。所有 Pulsar 主题均在命名空间内进行管理。

1.4 创建主题测试

Pulsar 将消息存储在主题中。即使 Pulsar 可以在引用主题时自动创建主题,在使用主题之前明确创建主题也是一种很好的做法。

要创建新主题,请运行以下命令:

root@pulsar pulsar\]# bin/pulsar-admin topics create persistent://public/default/my-topic ### 1.5 向主题写入消息测试 [root@pulsar pulsar]# bin/pulsar-client produce my-topic --messages 'Hello Pulsar!' ... 2025-04-14T11:30:37,582+0800 [main] INFO org.apache.pulsar.client.cli.PulsarClientTool - 1 messages successfully produced ### 1.6 从主题中读取消息测试 [root@pulsar pulsar]# bin/pulsar-client consume my-topic -s 'my-subscription' -p Earliest -n 0 Earliest 表示从最早的未消费消息开始消费。-n配置消费的消息数量,0 表示永远消费。 一个shell终端写入,另外一个终端读取: ----- got message ----- key:\[null\], properties:\[\], content:Hello Pulsar!-0 ----- got message ----- key:\[null\], properties:\[\], content:Hello Pulsar!-1 ----- got message ----- key:\[null\], properties:\[\], content:Hello Pulsar!-2 1.7 批量写入消息 \[root@pulsar pulsar\]# bin/pulsar-client produce my-topic --messages "$(seq -s, -f 'Message NO.%g' 1 10)" 读取的终端输出如下: ----- got message ----- key:\[null\], properties:\[\], content:Message NO.1 ... ----- got message ----- key:\[null\], properties:\[\], content:Message NO.10 1.8 停止Pulsar 使用bin/pulsar standalone启动时,使用Ctrl-C停止。 使用bin/pulsar-daemon start standalone启动时,使用一些命令停止集群: \[root@pulsar pulsar\]# bin/pulsar-daemon stop standalone ## 2.docker安装部署Pulsar(standalone) ### 2.1 使用docker 启动Pulsar 运行以下命令在 Docker 容器内启动 Pulsar docker run -d \ -p 6650:6650 -p 8080:8080 \ --mount source=pulsardata,target=/pulsar/data \ --mount source=pulsarconf,target=/pulsar/conf \ --user=0 \ apachepulsar/pulsar:2.11.4 bin/pulsar standalone 启动后会创建2个volume [root@pulsar pulsar]# docker volume ls DRIVER VOLUME NAME local pulsarconf local pulsardata 执行健康检查: [root@pulsar pulsarconf]# docker exec -it d7a633a7b7d8 bash root@d7a633a7b7d8:/pulsar# pwd /pulsar root@d7a633a7b7d8:/pulsar# bin/pulsar-admin brokers healthcheck ok ### 2.2 使用客户端API测试集群 Pulsar 提供多种客户端库,例如Java、Go、Python、C++。 下面的示例使用Python 客户端 API开始使用 Pulsar。 直接从PyPI安装 Pulsar Python 客户端库 pip install pulsar-client 创建consumer.py,创建消费者并订阅主题: import pulsar client = pulsar.Client('pulsar://localhost:6650') consumer = client.subscribe('my-topic', subscription_name='my-sub') while True: msg = consumer.receive() print("Received message: '%s'" % msg.data()) consumer.acknowledge(msg) client.close() 创建producer.py启动生产者来发送一些测试消息: import pulsar client = pulsar.Client('pulsar://localhost:6650') producer = client.create_producer('my-topic') for i in range(10): producer.send(('hello-pulsar-%d' % i).encode('utf-8')) client.close() 执行2个py脚本,consumer.py输出如下: [root@pulsar docker_install]# python consumer.py 2025-04-14 17:26:52.515 INFO [140167888657472] Client:86 | Subscribing on Topic :my-topic ... Received message: 'b'hello-pulsar-0'' Received message: 'b'hello-pulsar-1'' Received message: 'b'hello-pulsar-2'' Received message: 'b'hello-pulsar-3'' Received message: 'b'hello-pulsar-4'' Received message: 'b'hello-pulsar-5'' Received message: 'b'hello-pulsar-6'' Received message: 'b'hello-pulsar-7'' Received message: 'b'hello-pulsar-8'' Received message: 'b'hello-pulsar-9'' 获取topic的统计数据: curl http://localhost:8080/admin/v2/persistent/public/default/my-topic/stats | python -m json.tool

相关推荐
村东头老张6 小时前
通过 Docker 安装 MySQL
mysql·docker·容器
FreeBuf_6 小时前
Apache CXF 漏洞曝光:存在拒绝服务与数据泄露双重风险
apache
mysql学习中7 小时前
k8s集群搭建
云原生·容器·kubernetes
hzulwy7 小时前
k8s运行应用
云原生·容器·kubernetes
星释7 小时前
WAMP允许远程访问
php·apache·wamp
EmpressBoost8 小时前
docker run elasticsearch 报错
elasticsearch·docker·容器
x,,xx11111 小时前
近期学习总结
运维·docker·容器
i小溪12 小时前
如何通过docker容器反查容器和宿主机的挂载目录?
docker·容器
阿里云云原生12 小时前
赠送 10 张三天通票,和我们来畅聊 CommunityOverCode Asia 2025
apache