Apache Pulsar学习笔记16: 租户、命名空间创建,用户角色Token和权限配置
前面我们使用Helm在Kubernetes中部署了生产可用的Pulsar集群,并将集群接入到Prometheus监控系统。 作为Pulsar集群的管理员,将这套生产可用的Pulsar集群交付给开发使用时,还需要做好租户和命名空间划分和创建,用户角色和权限配置。 本节将根据实践介绍一下Pulsar集群管理员如何做这些工作的。
前面我们使用Helm在Kubernetes中部署了生产可用的Pulsar集群,并将集群接入到Prometheus监控系统。 作为Pulsar集群的管理员,将这套生产可用的Pulsar集群交付给开发使用时,还需要做好租户和命名空间划分和创建,用户角色和权限配置。 本节将根据实践介绍一下Pulsar集群管理员如何做这些工作的。
上一节,使用Pulsar官方的Helm Chart在Kubernetes集群中规划并部署了生产可用的Pulsar集群。 在上一节,我们还留了一个小尾巴,在部署Pulsar集群时,禁用了监控相关的组件(promethues, grafana等)。 在以Kubernetes为基础的云原生基础架构中,肯定已经单独部署了以Prometheus为核心的各个监控组件,因此我们希望使用平台统一的Prometheus实现对Pulsar集群的监控。
时间过得比较久了,在开始今天的学习之前先回顾一下前面已经学习的13节的内容。 0.阶段复习 Pulsar是一个支持多租户的、高性能的、分布式的Pub-Sub消息系统。 了解Pulsar的架构。Pulsar提供了一个比Cluster更高级别的抽象Instance。 一个Pulsar Instance由多个Pulsar Cluster组成 一个Instance中的Cluster之间可以相互跨地域复制数据 单个Pulsar集群由以下部分组成: Pulsar Proxy: 是无状态的,Proxy作为集群的智能路由层,是负责Pulsar客户端与Pulsar集群交互的统一网关 Pulsar Brokers: 也是无状态的,是集群的服务层,Proxy会将客户端的访问请求转发到正确的Broker上。Broker作为服务层与Pulsar的存储层进行交互 Bookies: 一个集群有多个Bookie节点(组成Bookeeper集群)负责消息的持久化存储 Zookeeper: 用于集群级别的配置和协调,并存储Pulsar集群的所有元数据 以docker容器运行单机Pulsar 学习使用命令行工具pulsar-admin创建tenant、namespace、topic 了解Pulsar Admin REST API tenant、namespace、topic的基本概念 Pulsar基于租户、命名空间、主题的逻辑层次结构支持多租户 分区Topic的概念 Topic URL格式 持久化Topic和非持久化Topic的概念 生产者和消费者、订阅和订阅模式 Pulsar支持: exclusive(独占), failover(故障转移/灾备), shared(共享), key-shared(基于key的共享模式) 4中订阅模式 使用命令行工具pulsar-client进行生产者和消费者测试 使用Pulsar Java客户端库创建生产者、消费者、Reader 消费者端可以使用"同步接收消息", “异步接收消息”, “MessageListener接收” 3种模式,其中MessageListener自带线程池 创建消费者时可以设置消费者的批量接收策略 多主题订阅: 设置单个消费者订阅多个主题 消费异常处理可以使用"无限重试", “捕获并忽略异常”, “死信主题(Dead Letter Topic)“三种方式 使用消息Reader可以由用户自己手动在Topic中定位,读取想要读取的消息 使用Pulsar Go客户端库 消费者端支持consumer.Receive()和consumer.Chan()两种方式消费消息。前者对channel关闭和context cancel的情况做了封装,后者要我们自己处理和channel的交互,但也提供了最大的灵活性。 多主题订阅 死信策略和死信主题 使用消息Reader 使用Pulsar Schema管理消息数据的类型安全性 Web图形化管理工具Pulsar Manager 延迟消息投递特性 指定多长时间后投递deliverAfter 指定在将来某个时间点投递deliverAt 分区Topic和路由模式 认证和授权 开启JWT身份认证 授权和权限管理 前面的学习一直是基于以docker容器启动的单机Pulsar。今天将学习使用Helm在Kubernetes集群中部署Pulsar集群。
上一节学习了如何为Pulsar开启基于JWT的身份认证。 Pulsar使用身份认证提供者(Authentication Provider)识别客户端,但如果只启用身份认证,那么只要客户端通过认证就可以访问集群中的所有资源,因此在启用身份认证的基础上,还必须为Pulsar开启授权以进行权限管理。 其实上一节在学习JWT身份认证时,已经开启了授权。本节将详细学习一下Pulsar的授权和权限管理。
Pulsar支持可插拔的身份认证和授权机制,Pulsar Proxy或者Pulsar Broker都支持该机制。认证和授权机制一起保证了客户端对Pulsar Topic、命名空间、租户的访问权限。 默认情况下,Pulsar并不会启用加密、身份认证和授权机制。之前我们使用pulsar-admin,pulsar-client等命令行工具,使用Java或Go语言开发的Consumer和Produmer,访问使用docker容器启动的单机Pulsar时,都未用到任何身份认证信息。 也就是说,Pulsar的默认配置是完全开放状态的,任何人都可以访问它。因此,必须启用Pulsar的认证和授权机制,为Pulsar各个组件开启安全防护。
分区Topic的概念 前面在学习Topic的时候,已经了解了分区Topic的基本概念。在Pulsar中一个Topic只能由一个Broker提供服务,而单个Topic的吞吐量受限于为其提供服务的Broker的计算能力,这限制了Topic的最大吞吐量。 Pulsar通过分区Topic来提高吞吐量,分区Topic在底层通过N个内部Topic实现,N就是分区的数量。
主流消息系统都会提供很多好用的特性支持各种业务场景,死信队列, 延迟队列这些词在使用这些消息系统时经常被提到。 Pulsar作为下一代云原生消息系统肯定也是支持这些特性的。Pulsar中没有队列的概念, 前面在学习使用Java和Go开发Pulsar的Consumer时,在创建Consumer时可以为其设置死信策略,并指定死信Topic。 本节将学习Pulsar中的延迟消息投递功能。
前面学习了Pulsar的架构,在本地开发环境中使用Docker运行了单机的Pulsar,并学习使用plusar-admin命令行工具管理集群、租户、命名空间和Topic,使用Java和Go开发Pulsar的Producer和Consumer,使用Pulsar Schema管理消息数据的类型安全。 本节将学习PulsarWeb图形管理工具Pulsar Manager,使用Pulsar Manager也可以监控和管理Pulsar集群、组合、命名空间和Topic。遵循渐进性学习原则,本节还是现在本地开发环境使用Docker容器运行Pulsar Manager,以后再完成在Kubernetes集群中部署生产就绪的Pulsar集群和Pulsar Manager。
前面两节分别介绍了如何使用Pulsar Java客户端库和Go客户端库开发Producer、Consumer。 目前主流的消息中间件都不负责消息在从生产者到消费者上下游传递过程中的类型安全性,而由客户端自己负责消息的序列化和反序列操作来保障消息传递的类型安全。 Pulsar也支持这种客户端的方法,生产者将具体类型的消息对象序列化成字节数组发送到Topic,消费者从Topic接收字节数组并反序列化为具体类型的消息对象。 除了由客户端负责消息类型安全性的方法,Pulsar还提供了一种服务端的方法即Pulsar Schema,本节将学习如何使用Pulsar Schema管理消息数据的类型安全性。
上一节学习了Pulsar中的生产者、消费者、订阅和订阅类型。 当一个消费者连接到Pulsar时,会创建一个订阅(Subscription),订阅有4种类型:独占模式、灾备模式、共享模式和基于key的共享模式。 订阅是命名好的配置规则,指导消息如何投递给消费者。生产者和消费者是连接到Pulsar的客户端,上节使用pulsar-client连接到Pulsar集群完成了消费者和生产者的测试。 真实场景中的生产者和消费者是我们开发的程序,从本节开始将学习如何使用各种编程语言开发Pulsar的生产者和消费者。