上一节学习了单个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容器。

1docker pull apachepulsar/pulsar:2.8.1
2
3docker volume create pulsar-data
4docker volume create pulsar-conf
5
6docker run -d -p 6650:6650  -p 8080:8080 --privileged \
7-v pulsar-data:/pulsar/data -v pulsar-conf:/pulsar/conf \
8--name pulsar \
9apachepulsar/pulsar:2.8.1 bin/pulsar standalone

如果pulsar正常启动,可以在docker容器的日志中找到messaging service is ready的信息:

1docker logs pulsar | grep "messaging service is ready"

单机模式的Pulsar Broker监听6650端口,Pulsar的客户端使用这个端口来从Pulsar发送和接收数据。

pulsar的配置和数据目录被挂载到了预先创建的docker volume中,可以在宿主机的docker数据目录中查看:

 1tree -L 4 /var/lib/docker/volumes/
 2/var/lib/docker/volumes/
 3├── backingFsBlockDev
 4├── metadata.db
 5├── pulsar-conf
 6│   └── _data
 7│       ├── bkenv.sh
 8│       ├── bookkeeper.conf
 9│       ├── broker.conf
10│       ├── client.conf
11│       ├── discovery.conf
12│       ├── filesystem_offload_core_site.xml
13│       ├── functions_log4j2.xml
14│       ├── functions-logging
15│       │   ├── console_logging_config.ini
16│       │   └── logging_config.ini
17│       ├── functions_worker.yml
18│       ├── global_zookeeper.conf
19│       ├── log4j2-scripts
20│       │   └── filter.js
21│       ├── log4j2.yaml
22│       ├── presto
23│       │   ├── catalog
24│       │   ├── config.properties
25│       │   ├── jvm.config
26│       │   └── log.properties
27│       ├── proxy.conf
28│       ├── pulsar_env.sh
29│       ├── pulsar_tools_env.sh
30│       ├── schema_example.conf
31│       ├── standalone.conf
32│       ├── websocket.conf
33│       └── zookeeper.conf
34└── pulsar-data
35    └── _data
36        └── standalone
37            ├── bookkeeper
38            ├── bookkeeper0
39            └── 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容器中:

1docker exec -it pulsar sh
2
3cd /pulsar/bin

使用pulsar-admin查看一下集群列表,可以看到只有一个名称为standalone的集群:

1./pulsar-admin clusters list
2"standalone"

查看一下租户列表,可以看到默认已经创建了public, pulsar, sample三个租户:

1./pulsar-admin tenants list
2"public"
3"pulsar"
4"sample"

下面创建一个名称为study的租户:

1./pulsar-admin tenants create study
2
3./pulsar-admin tenants list
4"public"
5"pulsar"
6"sample"
7"study"

在study租户下创建名称为app1的命名空间:

1./pulsar-admin namespaces create study/app1
2
3./pulsar-admin namespaces list study
4"study/app1"

下面在app1的命名空间下创建一个名称为topic-1的topic:

1./pulsar-admin topics create persistent://study/app1/topic-1
2
3./pulsar-admin topics list study/app1
4"persistent://study/app1/topic-1"

Pulsar Admin REST API

实际上,pulsar-admin命令行工具是使用Pulsar Admin REST API接口来完成工作的。Pulsar的Web接口在8080端口上。 可以直接以HTTP请求的形式访问Pulsar Admin REST API接口,例如查看study租户下的命名空间:

1curl 127.0.0.1:8080/admin/v2/namespaces/study
2["study/app1"]

https://pulsar.apache.org/admin-rest-api/是Pulsar Admin REST API的接口文档。

参考