新一代云原生消息队列 (一)
Pulsar 简介
Apache Pulsar 是新一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离的架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
Pulsar 由 Yahoo 开发,于 2016 年底开源,并在 2017 年 6 月提交给 Apache 孵化器。直到 2018 年 9 月,Apache 基金会宣布 Apache Pulsar 毕业成为顶级项目。
Pulsar 的优势:
Pulsar 架构
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 作者【技术小生】的原创文章。
原文链接:【http://xie.infoq.cn/article/965ff4141625b0d1bc7f31549】。未经作者许可,禁止转载。
评论