这是我参与「第四届青训营 」笔记创作活动的第 14 天!
Pulsar 详解
1、Pulsar 架构
(1)Pulsar Proxy
- Pulsar 客户端连接集群的两种方式
- Pulsar Client -> Broker
- Pulsar Client -> Proxy
- Pulsar Proxy 作用及其引用场景
- 部分场景无法知道 Broker 地址,如云环境或者 Kubernetes 环境
- Proxy 提供类似 GateWay 代理能力,解耦客户端和 Broker,保障 Broker 安全
(2)Pulsar Broker
- Pulsar Broker 无状态组件,负责运行两个模块
- Http 服务器
- 暴露了 restful 接口,提高生产者和消费者 topic 查找 api
- 调度分发器
- 异步的 tcp 服务器,通过自定义二进制协议进行数据传输
- Http 服务器
- Pulsar Broker 作为数据层代理
- Bookie 通讯
- 作为 ledger 代理负责和 Bookie 进行通讯
- 流量代理
- 消息写入ledger 存储到 Bookie
- 消息缓存在堆外,负责快速响应
- Bookie 通讯
(3)Pulsar Storage
- Pulsar 数据存储 Segment 在不同存储中的抽象
- 分布式 Journal 系统(Bookkeeper)中为 Journal/Ledger
- 分布式文件系统(GFS/HDFS)中为文件
- 普通磁盘中为文件
- 分布式 Blob 存储中 Blob
- 分布式对象存储为对象
- 定义好抽象之后,即可实现多就介质存储
- L1(缓存):
- Broker 使用堆外内存短暂存储消息
- 适用于 Tail-Read 读场景
- L2(Bookkeeper):
- Bookkeeper 使用 Qurom 写,能有效降低长尾
- 适用于 Catch-Up 较短时间内的较热数据
- L3(S3 等冷却):
- 存储成本低,拓展性好
- 适用于 Catch-Up 长时间内的冷数据
(4)Pulsar IO 连接器
- Pulsar IO 分为输入(Input)和输出(Output)两个模块。输入代表数据从哪儿来,通过Source 实现数据输入。输入代表数据要往哪儿去,通过 Sink 实现数据输出。
- Pulsar 提出了 IO(也成为 Pulsar Connector),用于解决 Pulsar 与周边系统的集成问题,帮助用户高效完成工作。
- 目前 Pulsar IO 支持非常多的连接集成操作,如:
- HDFS、Spark、Flink、Flume、FS、HBase等。
(5)Pulsar Functions(轻量级计算框架)
- Pulsar Functions 是一个轻量级加计算框架,提供一个部署简单、运维简单、API 简单的 FAAS 平台。
- Pulsar Functions 提高基于事件的服务。支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充。
- 使用 Pulsar Functions,用户可以轻松地部署和管理 function,通过 function 从 Pulsar topic 读取数据或者生产新数据到 Pulsar topic。
2、Pulsar 特性
(1)Pulsar 生产模式
(2)Pulsar 消费模式
- Exclusive
- Failover
- Shared
- Key_Shared
1.Exclusive 消费模式
- 独占订阅(Stream 流模型)
- 独占订阅中,在任何时间,一个消费者组(订阅)中有且只有一个消费者来消费 Topic 中的消息
2.Failover 消费模式
- 故障切换(Stream 流模型)
- 使用故障切换订阅,多个消费者(Consumer)可以附加到同一订阅。但一个订阅中的所有消费者,只会有一个消费者被选为该订阅的消费者。其他消费者将被指定为故障转移消费者。
3.Shared 消费模式
- 共享订阅(Stream 流模型)
- 使用共享订阅,在同一个订阅背后,用户按照应用的需求挂载任意多的消费者。订阅中的所有消息以循环分发形式发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者。
4.Key_Shared 消费模式
- 按 Key 共享订阅(Stream 流模型)
- 使用共享订阅,在同一个订阅背后,用户按照应用需求挂载任意多的消费者。订阅中的所有消费者以 key-hash 发送给订阅背后的多个消费者,并且一个消息仅传递给一个消费者。
(3)Pulsar 多租户
- Pulsar 多租户体现在 Url 中:
- persistent://tenant/namespace/topic
(4)Pulsar Plugin
- 当前支持 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
- 跨数据中心复制
- 消费其他地域数据
3、集群 HA & Scale-up
(1)HA & Scale-up
- Topic <-> Bundle 完成映射
- Bundle 分配给 Broker
- Lookup Topic
- Lookup Result
- Establish TCP Connection
4、存储计算分离
- 分层架构优势
- 流量代理层和数据存储层解耦
- 流量代理层无状态,可快速扩缩容(K8s 等弹性平台)
- 流量代理层可以对接海量的客户端连接
- 存储层负责数据存储,可以使用多级存储
- 计算层
- 对于写入的数据,可以做预处理,简单 ETL
- 可以做数据缓存,应对高扇出度场景
- 无状态,扩缩容后能快速完成负载均衡 Balance
- 存储层
- 按照数据冷热进行存储介质区分,降低成本
- 历史数据可海量保存,数据无价
- 可直接通过存储层接口读取数据,批式计算