Apache Pulsar学习笔记03: 本地开发环境docker容器中运行Pulsar
2021-10-24
上一节学习了单个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的接口文档。