Pulsar 笔记 | 青训营笔记

502 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第 14 天!

Pulsar 详解

1、Pulsar 架构

image.png

(1)Pulsar Proxy

image.png

  • Pulsar 客户端连接集群的两种方式
    • Pulsar Client -> Broker
    • Pulsar Client -> Proxy
  • Pulsar Proxy 作用及其引用场景
    • 部分场景无法知道 Broker 地址,如云环境或者 Kubernetes 环境
    • Proxy 提供类似 GateWay 代理能力,解耦客户端和 Broker,保障 Broker 安全

(2)Pulsar Broker

image.png

  • Pulsar Broker 无状态组件,负责运行两个模块
    • Http 服务器
      • 暴露了 restful 接口,提高生产者和消费者 topic 查找 api
    • 调度分发器
      • 异步的 tcp 服务器,通过自定义二进制协议进行数据传输
  • Pulsar Broker 作为数据层代理
    • Bookie 通讯
      • 作为 ledger 代理负责和 Bookie 进行通讯
    • 流量代理
      • 消息写入ledger 存储到 Bookie
      • 消息缓存在堆外,负责快速响应

(3)Pulsar Storage

image.png

  • Pulsar 数据存储 Segment 在不同存储中的抽象
    • 分布式 Journal 系统(Bookkeeper)中为 Journal/Ledger
    • 分布式文件系统(GFS/HDFS)中为文件
    • 普通磁盘中为文件
    • 分布式 Blob 存储中 Blob
    • 分布式对象存储为对象
  • 定义好抽象之后,即可实现多就介质存储 image.png
  • L1(缓存):
    • Broker 使用堆外内存短暂存储消息
    • 适用于 Tail-Read 读场景
  • L2(Bookkeeper):
    • Bookkeeper 使用 Qurom 写,能有效降低长尾
    • 适用于 Catch-Up 较短时间内的较热数据
  • L3(S3 等冷却):
    • 存储成本低,拓展性好
    • 适用于 Catch-Up 长时间内的冷数据

(4)Pulsar IO 连接器

image.png

  • Pulsar IO 分为输入(Input)和输出(Output)两个模块。输入代表数据从哪儿来,通过Source 实现数据输入。输入代表数据要往哪儿去,通过 Sink 实现数据输出。
  • Pulsar 提出了 IO(也成为 Pulsar Connector),用于解决 Pulsar 与周边系统的集成问题,帮助用户高效完成工作。
  • 目前 Pulsar IO 支持非常多的连接集成操作,如:
    • HDFS、Spark、Flink、Flume、FS、HBase等。

(5)Pulsar Functions(轻量级计算框架)

image.png

  • Pulsar Functions 是一个轻量级加计算框架,提供一个部署简单、运维简单、API 简单的 FAAS 平台。
  • Pulsar Functions 提高基于事件的服务。支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充。
  • 使用 Pulsar Functions,用户可以轻松地部署和管理 function,通过 function 从 Pulsar topic 读取数据或者生产新数据到 Pulsar topic。

2、Pulsar 特性

image.png

(1)Pulsar 生产模式

image.png

(2)Pulsar 消费模式

image.png

  • Exclusive
  • Failover
  • Shared
  • Key_Shared
1.Exclusive 消费模式

image.png

  • 独占订阅(Stream 流模型)
    • 独占订阅中,在任何时间,一个消费者组(订阅)中有且只有一个消费者来消费 Topic 中的消息
2.Failover 消费模式

image.png

  • 故障切换(Stream 流模型)
    • 使用故障切换订阅,多个消费者(Consumer)可以附加到同一订阅。但一个订阅中的所有消费者,只会有一个消费者被选为该订阅的消费者。其他消费者将被指定为故障转移消费者。
3.Shared 消费模式

image.png

  • 共享订阅(Stream 流模型)
    • 使用共享订阅,在同一个订阅背后,用户按照应用的需求挂载任意多的消费者。订阅中的所有消息以循环分发形式发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者。
4.Key_Shared 消费模式

image.png

  • 按 Key 共享订阅(Stream 流模型)
    • 使用共享订阅,在同一个订阅背后,用户按照应用需求挂载任意多的消费者。订阅中的所有消费者以 key-hash 发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者。

(3)Pulsar 多租户

  • Pulsar 多租户体现在 Url 中:
    • persistent://tenant/namespace/topic

(4)Pulsar Plugin

image.png

  • 当前支持 Plugin 类型
    • KOP(Kafka on Pulsar)
    • ROP(RocketMQ on Pulsar)
    • AOP(AMQP on Pulsar)
    • MOP(MQTT on Pulsar)
  • 实现 Plugin 需要支持的功能
    • 路由查询
    • Message Protocol
    • Offset & Msgld

(5)Pulsar GEO Relication

image.png

  • 跨数据中心复制
  • 消费其他地域数据

3、集群 HA & Scale-up

(1)HA & Scale-up

image.png

  • Topic <-> Bundle 完成映射
  • Bundle 分配给 Broker image.png
  • Lookup Topic
  • Lookup Result
  • Establish TCP Connection

4、存储计算分离

image.png

  • 分层架构优势
    • 流量代理层和数据存储层解耦
    • 流量代理层无状态,可快速扩缩容(K8s 等弹性平台)
    • 流量代理层可以对接海量的客户端连接
    • 存储层负责数据存储,可以使用多级存储
  • 计算层
    • 对于写入的数据,可以做预处理,简单 ETL
    • 可以做数据缓存,应对高扇出度场景
    • 无状态,扩缩容后能快速完成负载均衡 Balance
  • 存储层
    • 按照数据冷热进行存储介质区分,降低成本
    • 历史数据可海量保存,数据无价
    • 可直接通过存储层接口读取数据,批式计算