二进制和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
相关推荐
猫吃了源码3 小时前
k9s简介和安装
linux·docker·kubernetes
云原生指北4 小时前
Docker Sandboxes 上手:从安装到第一次跑 Agent
运维·docker·容器
ziyun6668884 小时前
Docker 容器化 Web 服务架构搭建与自动化运维项目
运维·docker·架构
heimeiyingwang6 小时前
【架构实战】Kubernetes故障排查全景图:从Pod异常到集群雪崩的诊断手册
容器·架构·kubernetes
骇客野人7 小时前
Docker Compose 部署多个独立 Jar 服务完整实操步骤
docker·容器·jar
AAA@峥7 小时前
K8s 资源管控:ResourceQuota 与 LimitRange 机制详解与实战
云原生·容器·kubernetes
daoihfoaf7 小时前
太原助听器品质甄选
容器
云川之下9 小时前
【k8s】Docker inspect 命令
docker·容器·kubernetes
猫吃了源码10 小时前
CentOS7使用Kubeadm安装部署K8s(Kubernetes)最新稳定版本1.26.x
云原生·容器·kubernetes
倔强的石头10610 小时前
飞牛OS部署Mtab:Docker搭建自托管书签导航并实现远程访问
运维·docker·容器