Kafka到Pulsar数据流演进之路(二) | 青训营笔记

95 阅读5分钟

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

3. Pulsar详解

3.1 Pulsar架构介绍

image.png

3.1.1 Pulsar Proxy

Pulsar客户端连接集群的两种方式:

  • Pulsar Client --> Broker
  • Pulsar Client --> Proxy

Pulsar Proxy的作用及应用场景:

  • 部分场景无法知道Broker地址,如云环境或者Kubernetes环境
  • Proxy提供类似GateWay代理能力,解耦客户端和Broker,保障Broker安全

image.png

3.1.2 Pulsar Broker

Pulsar Broker无状态组件,负责运行两个模块

  • HTTP服务器:暴露了restful接口,提供生产者和消费者topic查找api
  • 调度分发器:异步的tcp服务器,通过自定义二进制协议进行数据传输

Pulsar Broker作为数据代理层

  • Bookie通信:作为Ledger代理负责和Bookie进行通讯
  • 流量代理:消息写入ledger存储到Bookie;消息存在堆外,负责快速响应

image.png

3.1.3 Pulsar Storage

Pulsar数据存储Segment在不同存储中的抽象

  • 分布式Journal系统(Bookeeper)中为Journal/Ledger
  • 分布式文件系统(GFS/HDFS)中的文件
  • 普通磁盘中为文件
  • 分布式Blob存储为Blob
  • 分布式对象存储中为对象

定义好抽象以后,即可实现多介质存储

image.png

L1(缓存)

  • Broker使用堆外内存短暂存储消息
  • 适用于Tail-Read读场景

L2(Bookeeper)

  • Bookeeper使用Qurom写,能有效较低长尾
  • 适用于Catch-Up较短时间内的较热数据

L3(S3等冷存)

  • 存储成本低,扩展性好
  • 适用于Catch-Up长时间内的冷数据

image.png

3.1.4 Pulsar IO 连接器

Pulsar IO 分为输入和输出两个模块

  • 通过source实现数据输入
  • 通过sink实现数据输出

image.png

Pulsar IO (也称Pulsar Connector)用于解决Pulsar与周边系统的集成问题,帮助用户高效完成工作

目前Pulsar IO支持非常多的连接集成工作,如HDFS、Spark、Flink、ES等

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

Pulsar Functions 是一个轻量级计算框架,提供一个部署简单、运维简单、API简单的FAAS平台

  • 提供基于事件的服务,支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充
  • 用户可以轻松部署和管理Function,从Pulsar topic读取数据或者生产新数据到Pulsar topic.

3.2.1 Bookeeper架构

image.png

3.2.2 Bookeeper基本概念

  • Ledger:BK的一个基本存储单元,BK Client的读写操作都是以Ledger为粒度的
  • Fragment:BK的最小分布单元(实际上也是物理上的最小存储单元),也是Ledger的组成单位,默认下一个Ledger会对应的一个Fragment(一个Ledger也可能由多个Fragment组成)
  • Entry:每条日志都是一个Entry,它代表一个record,每条record都会有一个对应的entry id

image.png

3.2.3 Bookeeper读一致性

所有的Reader都可以安全读取Entry ID小于或者等于LAC的记录,从而保证reader不会读取未确认的数据,保证reader之间的一致性

3.2.4 Bookeeper读写分离

写入优化:

写入时,不但会写入到Journal中还会写入到缓存中,定期会做刷盘

读取优化:

先读Memtable没命中再通过索引读磁盘,Ledger Device中会维护一个索引结构,存储在RocksDB中,它会将(LedgerID, EntryID)映射到(EntryLogID, 文件中的偏移量)

3.3 Pulsar功能介绍

3.3.1 Pulsar生产模式

Access ModeDescribtion
Shared多个Producer可以同时往一个Topic中生产消息
Exclusive独占模式生产,只有一个Producer可以connect并生产消息,其他producer可以启动成功,作为stand-by
ExcusiveWithFencing独占模式生产,只有一个Producer可以connect并生产消息,其他producer可以启动时,老的Producer会断开连接
WaitForExclusive独占模式生产,只有一个Producer可以connect并生产消息,其他Producer会卡在创建Producer环节

3.3.2 Pulsar消费模式

  • Exclusive
  • Failover
  • Shared
  • Key_Shared

image.png

3.3.2.1 Pulsar消费模式——Exclusive消费模式

独占订阅(Stream流模型)

独占订阅中,在任何时间,一个消费者组中有且只有一个消费者来消费topic中的消息

image.png

3.3.2.2 Pulsar消费模式——Failover消费模式

故障切换(Stream流模型)

使用故障切换模式,多个消费者可以附加到同一订阅。但是,一个订阅中的所有消费者,只会有一个消费者被选为该订阅的主消费者,其他消费者被指定为故障转移消费者。

image.png

3.3.2.3 Pulsar消费模式——Shared消费模式

共享订阅(Queue队列模型)

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

image.png

3.3.2.4 Pulsar消费模式——Key_Shared消费模式

按Key共享订阅(Queue队列模型)

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

image.png

3.5.1 存算分离

分层架构优势:

  • 流量代理和数据存储解耦
  • 流量代理层无状态,可快速扩容(K8S等弹性平台)
  • 流量代理层可以对接海量的客户段连接
  • 存储层负责数据存储,可以使用多级存储

计算层:

  • 对写入的数据可以做简单的ETL预处理
  • 可以做数据缓存,应用高扇出度的场景
  • 无状态,扩容后能快速完成负载均衡

存储层:

  • 按照数据冷热进行存储介质区分,降低成本
  • 历史数据可海量保存,数据无价
  • 可直接通过存储层接口读取数据,批式计算

image.png