写点什么

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

作者:技术小生
  • 2022 年 7 月 06 日
  • 本文字数:1649 字

    阅读完需:约 5 分钟

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

Pulsar 简介

Apache Pulsar 是新一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离的架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。

Pulsar 由 Yahoo 开发,于 2016 年底开源,并在 2017 年 6 月提交给 Apache 孵化器。直到 2018 年 9 月,Apache 基金会宣布 Apache Pulsar 毕业成为顶级项目。

Pulsar 的优势:


Pulsar 架构

Pulsar 整体分为客户端和服务端,客户端和其他消息队列一样,都是由生产者和消费者。具体内容后续详解。

而服务端的结构可以分为三层,分别是代理层、Broker 层和 Bookie 层。

  1. 代理层

该层不是必须的。如果没有代理层,那么 Pulsar 的客户端就需要直接和每个 Broker 建立连接。但更多的时候,是整个 Server 集群暴露代理层的 IP 地址,由代理层做相应的请求转发。

  1. Broker 层

Broker 和一般 MQ 不同,数据不直接存储在 Broker 中,而是保存在 BookKeeper 集群中。由于 Broker 的无状态性,可以实现很方便地在容器环境中快速扩缩容。Broker 主要负责整个 Pulsar 集群的业务逻辑。处理常见的数据流请求。管理流的接口都基于 RESTFul 的 HTTP,数据流的接口则基于 Pulsar 自定义的二进制协议,使用 ProtoBuf 作为序列化工具。

  1. BookKeeper 层

BookKeeper 是一个可扩展、容错、低延迟、只可追加数据的存储服务。Pulsar 使用其存储数据,不做任何业务逻辑。其拥有动态伸缩、自动容错恢复、读写分离的能力。


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

Pulsar 源码结构

  1. distribution

最终编译的产物都会在这个目录下,分为 io、offloaders、servers 三个子模块。servers 为 Pulsar 应用的主体服务;io 模块提供相同/不同系统之间数据转换、offloaders 可以把冷数据迁移到一些第三方介质中

  1. buildtools

包含构建时使用的工具。比如在 GIthub 上提交一个 PR,会自动触发测试,测试的重试、样式检查等都是由该模块完成

  1. conf

所有的配置数据目录

  1. docker

pulsar 的 Docker 镜像模块,里面有对应的 dockerfile

  1. pulsar-metadata

通用的元数据模块,会被 managed-ledger、pulsar-sql 等使用。

  1. pulsar-testclient

用于单元测试的模块

  1. pulsar-config-validation

用于校验配置的正确性的通用包,在 Function 和 io 中会被使用

  1. pulsar-common

Broker 和 Client 都会同时引用的公共模块,里面定义了一些两边都会用到的对象

  1. bouncy-castle

Java 类库,对默认 JCE 的补充。比 SUN 提供的默认 JCE 多了许多密码套件和算法

  1. tests

用于测试的功能模块

  1. testmocks

单元测试的时候,需要很多 Mock 的工具类,存放于此

  1. pulsar-broker

Pulsar 服务端最核心的功能模块

  1. pulsar-broker-auth-athenz

Broker 的 Athenz 身份验证插件

  1. pulsar-broker-auth-sasl

Broker 的 SASL 身份验证插件

  1. pulsar-broker-common

Broker 端的通用功能模块,比如身份验证、配置缓存等通用能力

  1. pulsar-broker-shaded

用于构建 Broker 的 shaded 包

  1. pulsar-client

数据流客户端

  1. pulsar-client-1x-base

Pulsar 对 1.X 版本的协议兼容客户端

  1. pulsar-client-admin

管理流客户端,用于调用管理相关接口,比如创建、删除 Topic

  1. pulsar-client-admin-shaded

单纯用于构建客户端 shaded 包

  1. pulsar-client-all

构建完整的客户端,管理流和数据流都打到一个包里

  1. pulsar-client-api

Client 的通用 API

  1. pulsar-client-auth-athenz

Client 的 Athenz 身份认证插件

  1. pulsar-client-auth-sasl

Client 的 SASL 身份验证插件

  1. pulsar-client-messagecrypto-bc

消息加密工具库

  1. pulsar-client-tools

一些 CLI 工具

  1. pulsar-functions

Pulsar Function 的主要实现

  1. pulsar-io

一些具体的 IO 工具,可以让 Pulsar 的数据与其他软件(如 Kafka、Redis 等)进行打通

  1. pulsar-proxy

Pulsar 的代理层

  1. pulsar-sql

Pulsar SQL 的主要实现模块,可以用 SQL 查询 Pulsar 中的消息

  1. pulsar-websocket

Pulsar 的 WebSocket 通信实现模块

  1. tiered-storage

offload 的工具实现模块,可以把冷数据备份到其他介质

发布于: 刚刚阅读数: 3
用户头像

技术小生

关注

还未添加个人签名 2019.10.08 加入

还未添加个人简介

评论

发布
暂无评论
新一代云原生消息队列(一)_云原生_技术小生_InfoQ写作社区