为了方便快捷,此处使用Docker安装。
(1)拉取最新Pulsar Docker镜像
sudo docker pull apachepulsar/pulsar-all
(2)进入Docker容器
Pulsar容器内部的8080端口和6650端口分别映射到主机的8080端口和6650端口,其中8080端口是web端口,6650用于在程序中访问。
sudo docker run -it -p 6650:6650 -p 8080:8080 3782bd88b304 /bin/bash
此处的3782bd88b304是Image Id。
(3)查看Pulsar版本
实际拉取下来的Pulsar版本为2.8.1,可以使用如下命令查看:
bin/pulsar version
(4)启动本地的单节点Broker进程
前台启动:
bin/pulsar standalone
如果是前台启动,要想进行其他操作,则需要再开一个终端重新进入Docker。
sudo docker exec -it dd2c4601db79 /bin/bash
此处的dd2c4601db79是Container Id。
后台启动:
bin/pulsar-daemon start standalone
推荐使用后台启动的方式。
(1)使用producer发送消息
发送消息"hello pulsar"到名称为my-topic的这个Topic上。默认情况下,Topic可以不存在,会自动创建。生产上不建议开启自动创建Topic,避免误操作出现过多不必要的Topic。
bin/pulsar-client produce my-topic --messages "hello pulsar"
(2)使用consumer消费消息
从"my-topic"这个Topic上消费消息,并且指定订阅名称为"first-subscription",这个命令会让客户端阻塞,直到消费到生产者发送的一条消息才会退出。
bin/pulsar-client consume my-topic -n 100 -s "first-subscription" -t "Exclusive"
(3)查看有哪些租户
bin/pulsar-admin tenants list
初始化状态有3个租户,分别是"public"、“pulsar"和"sample”
(4)创建租户
bin/pulsar-admin tenants create my-tenant
(5)删除租户
bin/pulsar-admin tenants delete my-tenant
(6)查看指定租户(public)下的命名空间
bin/pulsar-admin namespaces list public
对于public租户,初始化状态有2个命名空间,“public/default"和"public/functions”。
Pulsar中topic、partition都是逻辑概念。基本的层级结构如下:
topic --> partition --> ledger --> fragment --> entry --> message
(1)拉取pulsar-mamager镜像
sudo docker pull apachepulsar/pulsar-manager
(2)运行pulsar-mamager容器
sudo docker run -it --name pulsar-manager\
-p 9527:9527 -p 7750:7750 \
-e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties \
-d apachepulsar/pulsar-manager
(3)创建管理员账号
注意:密码不能少于6位,否则无法登录
CSRF_TOKEN=$(curl http://localhost:7750/pulsar-manager/csrf-token)
curl \
-H "X-XSRF-TOKEN: $CSRF_TOKEN" \
-H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \
-H 'Content-Type: application/json' \
-X PUT http://localhost:7750/pulsar-manager/users/superuser \
-d '{"name": "admin", "password": "apachepulsar", "description": "test", "email": "username@test.org"}'
(4)登录pulsar-manager,访问地址:http://localhost:9527
踩坑:按照上面的方式,登录pulsar-manager后会发现无法看到Pulsar集群,并且一直提示"This environment is error. Please check it"。
报错原因:pulsar跟pulsar-manager分别运行在不同的容器中,它们只能访问自己的localhost,而不能访问彼此的。
解决方法:在pulsar-manager容器启动参数中加入 --network host,指定连接到host网络的容器共享Docker host的网络栈。在容器中可以看到host的所有网卡,并且连hostmame 也是host的。host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
因此pulsar-manager正确的启动的命令如下:
sudo docker run --rm --network host -it \
-e REDIRECT_HOST=http://localhost \
-e REDIRECT_PORT=9527 \
-e DRIVER_CLASS_NAME=org.postgresql.Driver \
-e URL='jdbc:postgresql://127.0.0.1:5432/pulsar_manager' \
-e USERNAME=pulsar \
-e PASSWORD=pulsar \
-e LOG_LEVEL=DEBUG \
-v $PWD:/data apachepulsar/pulsar-manager /bin/sh