其他分享
首页 > 其他分享> > 【学习手册】Apache pulsar操作手册

【学习手册】Apache pulsar操作手册

作者:互联网

1、Apache pulsar安装部署

1.1、前期准备

1.2、部署步骤

1.2.1、上传安装包到linux服务器上

下载地址:https://pulsar.apache.org/zh-CN/download/

1.2.2、解压文件到data目录下

tar -zxvf apache-pulsar-2.8.1-bin.tar.gz  -C /data/

1.2.3、初始化集群元数据信息

在risen-cdh01上执行

bin/pulsar initialize-cluster-metadata \
  --cluster pulsar-cluster \
  --zookeeper risen-cdh01:2181  \
  --configuration-store risen-cdh01:2181  \
  --web-service-url http://risen-cdh01:8089 \
  --web-service-url-tls https://risen-cdh01:8443 \
  --broker-service-url pulsar://risen-cdh01:6650 \
  --broker-service-url-tls pulsar+ssl://risen-cdh01:6651

执行成功

10:36:09.876 [main] INFO org.apache.bookkeeper.discover.ZKRegistrationManager - Successfully formatted BookKeeper metadata
10:36:09.880 [main] INFO org.apache.zookeeper.ZooKeeper - Session: 0x16734464b360002 closed
10:36:09.880 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x16734464b360002
10:36:10.033 [main] INFO org.apache.pulsar.PulsarClusterMetadataSetup - Cluster metadata for 'pulsar-cluster-1' setup correctly

如果执行失败,进入zkclient中。删除相关文件即可

[zookeeper, counters, bookies, ledgers, managed-ledgers, schemas, namespace, admin, loadbalance]

1.2.4、修改Bookkeeper配置文件

vim conf/bookkeeper.conf

修改如下部分:

zkServers=risen-cdh01:2181,risen-cdh02:2181,risen-cdh03:2181

**ps:**端口修改可以自定义,但是不能与已有的端口冲突

1.2.5、修改brokers配置文件

vim  conf/broker.conf

修改如下部分:

zookeeperServers=risen-cdh01:2181,risen-cdh02:2181,risen-cdh03:2181
configurationStoreServers=risen-cdh01:2181,risen-cdh02:2181,risen-cdh03:2181
clusterName=pulsar-cluster

1.2.6、修改conf目录下所有8080端口

因为8080端口过于常用,很容易被占用

这里进行调整,改为8089即可

1.2.7、将修改后的文件分发到其他几台服务器

scp -r apache-pulsar-2.8.1/ risen-cdh02:$PWD
scp -r apache-pulsar-2.8.1/ risen-cdh03:$PWD

1.2.8、安装BookKeeper集群

分别在三台机器执行

bin/pulsar-daemon start bookie

关闭
bin/pulsar-daemon stop bookie

执行完毕之后使用如下命令看看是否启动成功

bin/bookkeeper shell bookiesanity

1.2.9、安装brokers集群

分别在三台机器执行

bin/pulsar-daemon start broker

关闭
bin/pulsar-daemon stop broker

然后在risen-cdh01上执行

bin/pulsar-admin brokers list pulsar-cluster

不报错则启动成功

2、Pulsar Manager安装部署

2.1、前期准备

2.2、安装步骤

2.2.1、docker拉取最新的环境

docker pull apachepulsar/pulsar-manager:latest

2.2.2、运行

docker run -dit \
    -p 9527:9527 -p 7750:7750 \
    -e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties \
    apachepulsar/pulsar-manager:latest

2.2.3、创建账号

CSRF_TOKEN=$(curl http://risen-cdh01: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://risen-cdh01:7750/pulsar-manager/users/superuser \
    -d '{"name": "admin", "password": "apachepulsar", "description": "test", "email": "username@test.org"}'

2.2.4、查询有所的cluster

**pulsar-manager调用的pulsar-admin的api,而这个api需要从broker取信息,所以需要给pulsar-admin指定获取信息的broker url。 **

bin/pulsar-admin clusters list

2.2.5、指定cluster

bin/pulsar-admin clusters update pulsar-cluster --url http://192.168.5.213:8089

2.2.6、登录查询

访问http://risen-cdh01:9527

登录刚刚2.2.3设置的账号密码

安装完毕!

3、Pulsar概念简介

3.1、功能和特性

3.1.1、多租户

目的资源隔离,为每位用户配置不同的资源。A用户只能操作20%的资源,B用户操作30%资源(租户与命名空间的操作配合使用)

租户和命名空间是pulsar支持多租户的两个核心概念。
在租户级别,pulsar为特定的租户预留合适的存储空间、应用授权与认证机制
在命名空间级别,pulsar有一系列的配置策略。包括配额、流控、消息过期策略和命名空间之间的隔离策略

3.1.2、灵活的消息系统

3.1.3、云原生架构

3.1.4、segmented Sreams(分片流)

3.1.5、支持跨地域复制

3.2、Pulsar提供的组件

3.2.1、层级存储

3.2.2、Pulsar IO(Connector)连接器

3.2.3、Pulsar Functions(轻量级计算框架)

3.3、与kafka区别

3.3.1、概念模型

在kafka中有消费者组(consumer group),消费者组中的消费者只能消费topic某个分区中的数据

而在pulsar中是发布订阅模式(sub),可以自己制定策略去进行消费,例如让每个消费者都能消费所有数据

3.3.2、消息消费模式

3.3.3、消息确认(ack)

3.3.4、消息保留

3.3.5、对比总结

3.4、常用名词释义

4、Pulsar架构

**核心:**计算与存储分离

4.1、单个Pulsar集群构成

4.2、broker

broker会把数据从Managed Ledger缓存中分派到consumer,当积压超过缓存大小的时候,开始将数据给Bookkeeper

4.3、zookeeper

pulsar用zk进行源数据的存储、集群配置和协调

配置存储:存储租户、命名空间和其他需要全局一致的配置项

4.4、bookkeeper

持久化存储容器,是一个分布式的预写(WAL)

特性参考官网文档

4.5、pulsar proxy

为所有的broker提供一个网关,当不能直接连接的时候,可以通过proxy与brokers进行通信

5、Pulsar操作简介

5.1、pulsar-admin操作namespace命令

5.1.1、创建指定租户的namespaces

pulsar-admin namespaces create test-tenant/test-namespace

5.1.2、列出租户下所有namespaces

pulsar-admin namespaces list test-tenant

5.1.3、删除租户下已经存在的namespaces

pulsar-admin namespaces delete test-tenant/ns1

5.1.4、设置积压配额政策

pulsar-admin namespaces set-backlog-quota --limit 10--policy producer_request_hold test-tenant/ns1

5.1.5、查看积压配额策略

pulsar-admin namespaces get-backlog-quotas test-tenant/ns1

5.1.6、移除积压配额策略

pulsar-admin namespaces remove-backlog-quota test-tenant/ns1

5.1.7、设置持久化策略

pulsar-admin namespaces set-persistence --bookkeeper-ack-quorum 2--bookkeeper-ensemble 3--bookkeeper-write-quorum 2--ml-mark-delete-max-rate 0 test-tenant/ns1

5.1.8、获取持久化策略

pulsar-admin namespaces get-persistence test-tenant/ns1

5.1.9、卸载命名空间

pulsar-admin namespaces unload --bundle 0x00000000_0xffffffff test-tenant/ns1

5.1.10、清除消息堆积

pulsar-admin namespaces clear-backlog --submy-subscription test-tenant/ns1

5.1.11、设置消息存留参数

命名空间包含多个 topic,每个 topic 的保留大小(存储大小)不应超过特定阈值,否则其存储时间会受到限制。 可通过以下命令配置指定命名空间中 topic 的保留大小和保留时间。

pulsar-admin set-retention --size 10--time 100 test-tenant/ns1

5.1.12、设置消息分发速率

为给定命名空间下所有 topic 设置消息派发速率。 通过每 X 秒消息数(msg-dispatch-rate))或者每 X 秒消息字节数来限制(byte-dispatch-rate)派发速率。 派发速率指每秒派发的消息数,可通过 dispatch-rate-period 来配置。 msg-dispatch-ratebyte-dispatch-rate 的默认值均为 -1,即禁用配额限制。

pulsar-admin namespaces set-dispatch-rate test-tenant/ns1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1

5.1.13、获取消息分发速率配置

发送消息数 / 秒

pulsar-admin namespaces get-dispatch-rate test-tenant/ns1

5.2、pulsar-admin操作Tenants(租户)命令

5.2.1、获取资源列表

pulsar-admin tenants list

5.2.2、创建租户

pulsar-admin tenants create 租户名

5.2.3、删除租户

pulsar-admin tenants delete 租户名

5.3、pulsar-admin操作Topic命令

5.3.1、列出指定命名空间下所有持久 topic

pulsar-admin persistent list my-tenant/my-namespace

5.3.2、授权给客户端用户,允许其在指定的 topic 上执行某些操作

pulsar-admin persistent grant-permission \
  --actions produce,consume --role application1 \
  persistent://test-tenant/ns1/tp1 \

5.3.3、获取权限

pulsar-admin persistent permissions \
  persistent://test-tenant/ns1/tp1 \
{
    "application1": [
        "consume",
        "produce"
    ]
}

5.3.4、取消权限

pulsar-admin persistent revoke-permission \
  --role application1 \
  persistent://test-tenant/ns1/tp1 \
{
  "application1": [
    "consume",
    "produce"
  ]
}

5.3.5、删除topic

pulsar-admin persistent delete  persistent://test-tenant/ns1/tp1 

5.3.6、卸载该命名空间下的topic

pulsar-admin persistent unload   persistent://test-tenant/ns1/tp1

5.3.7、查看topic中的10条数据

pulsar-admin persistent peek-messages \
  --count 10 --subscription my-subscription \
  persistent://test-tenant/ns1/tp1

5.3.8、创建topic

**注意:**不管是否有分区,在创建topic后,60s内无操作则会认为该topic是不活动的,会进行删除

相关参数:

Brokerdeleteinactivetopicsenabenabled:默认值为true表示是否启动自动删除功能
BrokerDeleteInactiveTopicsFrequencySeconds:默认60s
pulsar-admin topics create persistent://my-tenant/my-namespace/mytopic
pulsar-admin topics create-partitioned-copic persistent://my-tenant/my-namespace/mytopic --partitions 5

5.3.9、查询topic被哪个broker代理执行

pulsar-admin topics lookup persistent://my-tenant/my-namespace/mytopic

6、权限操作

权限可以具体操作topic级别,这里用命名空间级别进行测试

6.1、配置

6.1.1、生成秘钥

在pulsar根目录下创建一个key目录用于存放key

bin/pulsar tokens create-secret-key --output key/my-secret.key --base64

6.1.2、创建身份令牌

创建一个super用户的,名字随便起,主要用于之后的管理。

bin/pulsar tokens create --secret-key key/my-secret.key --subject hz-super

执行完拿到一个super用户的拿到一个token

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJoei1zdXBlciJ9.1ePk26E5XllSBKrSUkyR7XGnwJ1C1G1ceI9XdriNwXE

6.1.3、配置broker.conf

authenticationEnabled=true
authorizationEnabled=true
authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken
tokenSecretKey=/opt/apache-pulsar-2.8.1/key/my-secret.key
brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken
brokerClientAuthenticationParameters=token:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJoei1zdXBlciJ9.1ePk26E5XllSBKrSUkyR7XGnwJ1C1G1ceI9XdriNwXE
superUserRoles=hz-super

6.1.4、配置client.conf

authPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken
authParams=token:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJoei1zdXBlciJ9.1ePk26E5XllSBKrSUkyR7XGnwJ1C1G1ceI9XdriNwXE

6.1.5、重启broker并验证

bin/pulsar-daemon stop broker
bin/pulsar-daemon start broker
bin/pulsar-admin tenants list

已经正常

"hz-test-tenants"
"public"
"pulsar"

6.2、java测试

6.2.1、生成新用户的token

bin/pulsar tokens create --secret-key key/my-secret.key  --subject test

拿到token

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0In0.ZLU3PsOlh3H282_n34i7Wm8qyb-VMckKsfY-QU9rUIQ

6.2.2、赋权

bin/pulsar-admin namespaces grant-permission hz-test-tenants/hz-ns02 --role test  --actions produce,consume

6.2.3、构建java客户端代码

PulsarClient client = PulsarClient.builder()
        .serviceUrl(SERVER_URL)
        .enableTcpNoDelay(true)
        .build();

直接执行报错

Exception in thread "main" org.apache.pulsar.client.api.PulsarClientException$AuthenticationException: Unable to authenticate
	at org.apache.pulsar.client.api.PulsarClientException.unwrap(PulsarClientException.java:965)
	at org.apache.pulsar.client.impl.ConsumerBuilderImpl.subscribe(ConsumerBuilderImpl.java:97)
	at ConsumerDemo.main(ConsumerDemo.java:27)

6.2.4、增加token配置

.authentication(AuthenticationFactory.token("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0In0.ZLU3PsOlh3H282_n34i7Wm8qyb-VMckKsfY-QU9rUIQ"))

正常执行

6.3、java赋权操作

6.3.1、创建PulsarAdmin

需要用super账户的token来进行验证,否则会报权限不足的错误

PulsarAdmin admin = PulsarAdmin.builder()
        .serviceHttpUrl(SERVER_HTTP_URL)
        .authentication(AuthenticationFactory.token(TOKEN))
        .build();

6.3.2、查询命名空间namespace的用户权限

System.out.println(admin.namespaces().getPermissions("hz-test-tenants/hz-ns02").toString());

结果:

{hz-super=[consume, produce], hz-test-tenants=[consume, produce]}

6.3.3、授权命名空间的访问权限

Set<AuthAction> action  = new HashSet<AuthAction>();
action.add(AuthAction.produce);
admin.namespaces().grantPermissionOnNamespace("hz-test-tenants/hz-ns02", "hz-produce", action);
System.out.println(admin.namespaces().getPermissions("hz-test-tenants/hz-ns02").toString());

结果:

{hz-test-tenants=[consume, produce], hz-super=[consume, produce], hz-produce=[produce]}

6.3.4、移除命名空间的权限

admin.namespaces().revokePermissionsOnNamespace("hz-test-tenants/hz-ns02", "hz-produce");
System.out.println(admin.namespaces().getPermissions("hz-test-tenants/hz-ns02").toString());

结果:

{hz-test-tenants=[consume, produce], hz-super=[consume, produce]}

6.3.5、查询topic的操作权限

System.out.println(admin.topics().getPermissions("persistent://hz-test-tenants/hz-ns02/hz-topic2"));

结果:

{hz-super=[consume, produce], hz-test-tenants=[consume, produce]}

6.3.6、授予用户操作topic的权限

Set<AuthAction> action1 = new HashSet<AuthAction>();
action1.add(AuthAction.consume);
admin.topics().grantPermission("persistent://hz-test-tenants/hz-ns02/hz-topic2","hz-test-topic", action1);
System.out.println(admin.topics().getPermissions("persistent://hz-test-tenants/hz-ns02/hz-topic2"));

结果:

{hz-super=[consume, produce], hz-test-topic=[consume], hz-test-tenants=[consume, produce]}

6.3.7、移除用户的权限

admin.topics().revokePermissions("persistent://hz-test-tenants/hz-ns02/hz-topic2","hz-test-topic") ;
System.out.println(admin.topics().getPermissions("persistent://hz-test-tenants/hz-ns02/hz-topic2"));

结果:

{hz-super=[consume, produce], hz-test-tenants=[consume, produce]}

7、消息保留和过期策略

7.1、Retention

$ pulsar-admin namespaces get-retention [your tenant]/[your-namespace]
{
  "retentionTimeInMinutes": 10,
  "retentionSizeInMB": 0
}

java

int retentionTime = 10; // 10 minutes
int retentionSize = 500; // 500 megabytes
RetentionPolicies policies = new RetentionPolicies(retentionTime, retentionSize);
admin.namespaces().setRetention("hz-test-tenants/hz-ns02", policies );

7.2、TTL(Time To Live) 策略

pulsar-admin namespaces get-message-ttl [your tenant]/[your namespace] 60

java

admin.namespaces().setNamespaceMessageTTL("hz-test-tenants/hz-ns02",60);

8、Connect IO连接器

以mysql binlog为例

8.1、下载连接器

在下载页面找到对应的连接器进行下

https://pulsar.apache.org/zh-CN/download/

8.2、创建文件夹connecters

用于放这些连接器

8.3、创建连接器配置文件

tenant: "public"
namespace: "default"
name: "debezium-mysql-source"
topicName: "debezium-mysql-topic"
archive: "connectors/pulsar-io-debezium-mysql-2.8.1.nar"
parallelism: 1

configs:
    database.hostname: "risen-cdh01"
    database.port: "3306"
    database.user: "cdh"
    database.password: "123456"
    database.server.id: "184054"
    database.server.name: "dbserver1"
    database.whitelist: "test"
    database.history: "org.apache.pulsar.io.debezium.PulsarDatabaseHistory"
    database.history.pulsar.topic: "history-topic"
    database.history.pulsar.service.url: "pulsar://risen-cdh01:6650"
    key.converter: "org.apache.kafka.connect.json.JsonConverter"
	pulsar.service.url: "pulsar://risen-cdh01:6650"
    value.converter: "org.apache.kafka.connect.json.JsonConverter"
    offset.storage.topic: "offset-topic"

8.4、创建连接器

bin/pulsar-admin source  create --source-config-file debeziumConf/mysql.yaml 

8.5、验证是否成功

bin/pulsar-admin persistent list public/default
"persistent://public/default/dbserver1.test.test01"
"persistent://public/default/dbserver1"
"persistent://public/default/dbserver1.test.mysql_func2"

生成了对应的topic

8.6、模拟消费者进行订阅

bin/pulsar-client consume -s "sub-products" public/default/dbserver1.test.mysql_func2 -n 0

arDatabaseHistory"
database.history.pulsar.topic: “history-topic”
database.history.pulsar.service.url: “pulsar://risen-cdh01:6650”
key.converter: “org.apache.kafka.connect.json.JsonConverter”
pulsar.service.url: “pulsar://risen-cdh01:6650”
value.converter: “org.apache.kafka.connect.json.JsonConverter”
offset.storage.topic: “offset-topic”


### 8.4、创建连接器

bin/pulsar-admin source create --source-config-file debeziumConf/mysql.yaml


### 8.5、验证是否成功

bin/pulsar-admin persistent list public/default


“persistent://public/default/dbserver1.test.test01”
“persistent://public/default/dbserver1”
“persistent://public/default/dbserver1.test.mysql_func2”


生成了对应的topic

### 8.6、模拟消费者进行订阅

bin/pulsar-client consume -s “sub-products” public/default/dbserver1.test.mysql_func2 -n 0




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EvZG76x7-1644385852303)(C:\Users\ADMINI~1\AppData\Local\Temp\1640938418974.png)]

标签:hz,操作手册,admin,--,topic,test,Apache,pulsar
来源: https://blog.csdn.net/qq237408305/article/details/122840408