当前位置:网站首页>新一代云原生消息队列(一)

新一代云原生消息队列(一)

2022-07-06 18:34:00 InfoQ

Pulsar简介

 Apache Pulsar是新一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离的架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
 Pulsar由Yahoo开发,于2016年底开源,并在2017年6月提交给Apache孵化器。直到2018年9月,Apache基金会宣布Apache Pulsar毕业成为顶级项目。
Pulsar的优势:

Pulsar架构

null
Pulsar整体分为客户端和服务端,客户端和其他消息队列一样,都是由生产者和消费者。具体内容后续详解。
而服务端的结构可以分为三层,分别是代理层、Broker层和Bookie层。
  • 代理层
 该层不是必须的。如果没有代理层,那么Pulsar的客户端就需要直接和每个Broker建立连接。但更多的时候,是整个Server集群暴露代理层的IP地址,由代理层做相应的请求转发。
  • Broker层
 Broker和一般MQ不同,数据不直接存储在Broker中,而是保存在BookKeeper集群中。由于Broker的无状态性,可以实现很方便地在容器环境中快速扩缩容。Broker主要负责整个Pulsar集群的业务逻辑。处理常见的数据流请求。管理流的接口都基于RESTFul的HTTP,数据流的接口则基于Pulsar自定义的二进制协议,使用ProtoBuf作为序列化工具。
  • BookKeeper层
 BookKeeper是一个可扩展、容错、低延迟、只可追加数据的存储服务。Pulsar使用其存储数据,不做任何业务逻辑。其拥有动态伸缩、自动容错恢复、读写分离的能力。

 Broker和BookKeeper都会使用ZooKeeper作为元数据存储服务。不过由于ZooKeeper太重量级,从2.10之后Pulsar支持可选元数据存储服务。

Pulsar源码结构

  •  distribution
 最终编译的产物都会在这个目录下,分为io、offloaders、servers三个子模块。servers为Pulsar应用的主体服务;io模块提供相同/不同系统之间数据转换、offloaders可以把冷数据迁移到一些第三方介质中
  • buildtools
 包含构建时使用的工具。比如在GIthub上提交一个PR,会自动触发测试,测试的重试、样式检查等都是由该模块完成
  • conf
 所有的配置数据目录
  • docker
 pulsar的Docker镜像模块,里面有对应的dockerfile
  • pulsar-metadata
 通用的元数据模块,会被managed-ledger、pulsar-sql等使用。
  • pulsar-testclient
 用于单元测试的模块
  • pulsar-config-validation
 用于校验配置的正确性的通用包,在Function和io中会被使用
  • pulsar-common
 Broker和Client都会同时引用的公共模块,里面定义了一些两边都会用到的对象
  • bouncy-castle
 Java类库,对默认JCE的补充。比SUN提供的默认JCE多了许多密码套件和算法
  • tests
 用于测试的功能模块
  • testmocks
 单元测试的时候,需要很多Mock的工具类,存放于此
  • pulsar-broker
 Pulsar服务端最核心的功能模块
  • pulsar-broker-auth-athenz
 Broker的Athenz身份验证插件
  • pulsar-broker-auth-sasl
 Broker的SASL身份验证插件
  • pulsar-broker-common
 Broker端的通用功能模块,比如身份验证、配置缓存等通用能力
  • pulsar-broker-shaded
用于构建Broker的shaded包
  • pulsar-client
数据流客户端
  • pulsar-client-1x-base
Pulsar对1.X版本的协议兼容客户端
  • pulsar-client-admin
 管理流客户端,用于调用管理相关接口,比如创建、删除Topic
  • pulsar-client-admin-shaded
单纯用于构建客户端shaded包
  • pulsar-client-all
 构建完整的客户端,管理流和数据流都打到一个包里
  • pulsar-client-api
 Client的通用API
  • pulsar-client-auth-athenz
Client的Athenz身份认证插件
  • pulsar-client-auth-sasl
 Client的SASL身份验证插件
  • pulsar-client-messagecrypto-bc
 消息加密工具库
  • pulsar-client-tools
一些CLI工具
  • pulsar-functions
Pulsar Function的主要实现
  • pulsar-io
一些具体的IO工具,可以让Pulsar的数据与其他软件(如Kafka、Redis等)进行打通
  • pulsar-proxy
Pulsar的代理层
  • pulsar-sql
Pulsar SQL的主要实现模块,可以用SQL查询Pulsar中的消息
  • pulsar-websocket
Pulsar的WebSocket通信实现模块
  • tiered-storage
offload的工具实现模块,可以把冷数据备份到其他介质
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/965ff4141625b0d1bc7f31549