【注意】最后更新于 October 24, 2021,文中内容可能已过时,请谨慎使用。
上一节学习了单个Pulsar集群的组成: 无状态智能路由层Pulsar Proxy(可选)、无状态服务层Pulsar Broker、消息持久化存储Bookies,配置协调和元数据存储Zookeeper。
本节我们将在个人本地开发环境开始使用Pulsar,对于本地开发和测试只需要运行单机模式的Pulsar。在容器中运行Pulsar是本地开发测试最简单的方法。
这里将在本地开发环境中使用docker启动Pulsar Standloen的容器。
以docker容器运行单机Pulsar
dockerhub中的apachepulsar/pulsar
镜像由pulsar官方提供,这个镜像中包含了pulsar必须的broker, zookeeper, bookkeeper组件。
下面从dockerhub拉取pulsar的镜像并启动pulsar容器。
1
2
3
4
5
6
7
8
9
|
docker pull apachepulsar/pulsar:2.8.1
docker volume create pulsar-data
docker volume create pulsar-conf
docker run -d -p 6650:6650 -p 8080:8080 --privileged \
-v pulsar-data:/pulsar/data -v pulsar-conf:/pulsar/conf \
--name pulsar \
apachepulsar/pulsar:2.8.1 bin/pulsar standalone
|
如果pulsar正常启动,可以在docker容器的日志中找到messaging service is ready
的信息:
1
|
docker logs pulsar | grep "messaging service is ready"
|
单机模式的Pulsar Broker监听6650端口,Pulsar的客户端使用这个端口来从Pulsar发送和接收数据。
pulsar的配置和数据目录被挂载到了预先创建的docker volume中,可以在宿主机的docker数据目录中查看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
tree -L 4 /var/lib/docker/volumes/
/var/lib/docker/volumes/
├── backingFsBlockDev
├── metadata.db
├── pulsar-conf
│ └── _data
│ ├── bkenv.sh
│ ├── bookkeeper.conf
│ ├── broker.conf
│ ├── client.conf
│ ├── discovery.conf
│ ├── filesystem_offload_core_site.xml
│ ├── functions_log4j2.xml
│ ├── functions-logging
│ │ ├── console_logging_config.ini
│ │ └── logging_config.ini
│ ├── functions_worker.yml
│ ├── global_zookeeper.conf
│ ├── log4j2-scripts
│ │ └── filter.js
│ ├── log4j2.yaml
│ ├── presto
│ │ ├── catalog
│ │ ├── config.properties
│ │ ├── jvm.config
│ │ └── log.properties
│ ├── proxy.conf
│ ├── pulsar_env.sh
│ ├── pulsar_tools_env.sh
│ ├── schema_example.conf
│ ├── standalone.conf
│ ├── websocket.conf
│ └── zookeeper.conf
└── pulsar-data
└── _data
└── standalone
├── bookkeeper
├── bookkeeper0
└── zookeeper
|
命令行工具pulsar-admin
Pulsar提供了一个命令行工具pulsar-admin
,以容器启动的单机模式pulsar,这个命令行工具在/pulsar/bin
目录中。
前面学习了Pulsar的最高级别抽象是Pulsar实例,一个Pulsar实例下可以有多个Pulsar集群分布在不同的地域。使用pulsar-admin
可以从一个点管理整个实例,包括所有集群。
遵循渐进性学习的原则,本节将探索使用pulsar-admin
管理单个单机版pulsar集群。
在开始使用pulsar-admin
之前,先了解一下pulsar的逻辑架构,pulsar在逻辑架构上由租户(Tenant)、命名空间(Namespace)、主题(Topic)组成。为什么称之为逻辑架构呢?
因为pulsar对多租户的支持是可以跨集群的,即租户可以跨集群分布。pulsar的多租户性质体现在topic的URL上,结构是persistent://tenant/namespace/topic
。
进入到前面启动的单机版pulsar容器中:
1
2
3
|
docker exec -it pulsar sh
cd /pulsar/bin
|
使用pulsar-admin
查看一下集群列表,可以看到只有一个名称为standalone
的集群:
1
2
|
./pulsar-admin clusters list
"standalone"
|
查看一下租户列表,可以看到默认已经创建了public
, pulsar
, sample
三个租户:
1
2
3
4
|
./pulsar-admin tenants list
"public"
"pulsar"
"sample"
|
下面创建一个名称为study
的租户:
1
2
3
4
5
6
7
|
./pulsar-admin tenants create study
./pulsar-admin tenants list
"public"
"pulsar"
"sample"
"study"
|
在study租户下创建名称为app1的命名空间:
1
2
3
4
|
./pulsar-admin namespaces create study/app1
./pulsar-admin namespaces list study
"study/app1"
|
下面在app1的命名空间下创建一个名称为topic-1
的topic:
1
2
3
4
|
./pulsar-admin topics create persistent://study/app1/topic-1
./pulsar-admin topics list study/app1
"persistent://study/app1/topic-1"
|
Pulsar Admin REST API
实际上,pulsar-admin命令行工具是使用Pulsar Admin REST API接口来完成工作的。Pulsar的Web接口在8080端口上。
可以直接以HTTP请求的形式访问Pulsar Admin REST API接口,例如查看study租户下的命名空间:
1
2
|
curl 127.0.0.1:8080/admin/v2/namespaces/study
["study/app1"]
|
https://pulsar.apache.org/admin-rest-api/是Pulsar Admin REST API的接口文档。
参考