上一节学习了单个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的接口文档。

参考