当前位置:首页 > 行业动态 > 正文

Pulsar是什么?探索其神秘本质与科学价值

“Pulsar” 是一个开源的消息传递系统,专为实时数据流处理而设计。它支持高吞吐量、低延迟和可扩展性,适用于各种应用场景,如物联网、金融交易等。

Apache Pulsar是Apache软件基金会的顶级项目,被誉为下一代云原生分布式消息流平台,它集消息、存储、轻量化函数式计算为一体,采用计算与存储分离的架构设计,支持多租户、持久化存储、跨区域复制,具有强一致性、高吞吐、低延迟及高可扩展性等流数据存储特性。

一、Pulsar的核心组件

组件 描述
Broker 无状态组件,负责处理producer和consumer的请求,消息的复制与分发,以及数据的计算。
ZooKeeper 存储元数据、集群配置,协调任务(例如哪个broker负责哪个topic),服务的发现(例如broker发现bookie的地址)。
Bookie 用于数据的持久化存储,除了消息数据,cursors也会被持久化到Bookie,每一个存储节点叫做一个bookie。
Producer & Consumer 生产者发送数据给Pulsar,将消息以append的形式追加到topic中;消费者订阅topic并接收消息。

二、Pulsar的关键特性

特性 描述
多租户 支持多租户,每个租户有独立的命名空间和策略。
灵活的消息系统 统一了队列模型和流模型,同一份数据可多次消费。
云原生架构 计算与存储分离,支持独立扩展和快速恢复。
跨地域复制 支持跨不同地理位置的数据中心复制数据,提高可用性。
Pulsar Functions 基于Pulsar的轻量级流处理方式,可直接在broker节点上或作为Kubernetes集群中的容器部署。

三、Pulsar的订阅模式

模式 描述
Exclusive 一个subscription只允许被一个consumer用于订阅topic,如果多个consumer使用相同的subscription去订阅同一个topic,则会发生错误。
Failover 多个consumer允许使用同一个subscription去订阅topic,但只有一个consumer作为主consumer,其他作为故障转移consumer,当主consumer失去连接时,topic将被重新分配给其中一个故障转移consumer。
Shared 多个consumer可以使用同一个subscription去订阅topic,消息以轮询的方式分发给consumer。
Key_Shared key_shared是Pulsar 2.4.0以后一个新的订阅模式,多个consumer可以使用同一个subscription去订阅topic,消息按照key分发给consumer,含有相同key的消息只被发送给同一个consumer。

四、Pulsar的存储模型

概念 描述
Topic(分区) 逻辑上的概念,是消息的集合,所有生产者的消息都会归属到指定的topic里。
Partition(分区) topic进一步分成多个分片(segment),segment是Pulsar中真正的物理单元。
Segment(分片) 数据持久化在Bookie中,segment对应的就是Bookie中的ledger。
Entry 存储到BookKeeper中的一条记录。
Ledger 用来存储entry,多个entry序列组成一个ledger。
Journal文件 包含BookKeeper中的消息写入日志。
Entry log文件 管理BookKeeper客户端写入的entry,来自不同ledger的entry会被依次写入一个或多个entry log中。
Index file ledger的索引文件,记录每个ledger在entry log文件中的存储位置以及数据在entry log文件中的长度。
Ledger cache 用于缓存索引文件,加快查找效率。

五、Pulsar的数据落盘与压缩

数据落盘:内存中会存储一个LastLogMark,其中包含txnLogId(journal文件的id)和txnLogPos(journal文件中的位置),entry log文件和index文件都会先在内存中被缓存,当内存达到一定值或者离上一次刷盘过期了一段时间后,会触发entry log文件和index文件的刷盘,之后再将LastLogMark持久化,如果在持久化前发生宕机,可以通过journal文件进行恢复,保证了数据不丢失。

数据压缩:Pulsar支持对Producer发送的消息进行压缩,以提高传输效率和节省存储空间,支持的压缩类型包括LZ4、ZLIB、ZSTD和SNAPPY。

六、Pulsar的Functions与IO连接器

Pulsar Functions:Pulsar Functions是基于Pulsar的轻量级流处理方式,可以直接在broker节点上或作为Kubernetes集群中的容器部署,通过Pulsar Functions,Pulsar可以直接解决许多流处理任务,简化操作。

Pulsar IO连接器:Pulsar提供了多种类型的连接器,如Pulsar Adapters和Pulsar Connectors,以及Pulsar SQL(Pulsar Presto Connector),使得数据更容易移入、移出Apache Pulsar。

七、Pulsar的生态与社区

Pulsar拥有活跃的社区和丰富的生态项目,包括各种语言的客户端(如Java、C++、.Net/C#、Go、NodeJS、Ruby等)、管理工具(如Pulsar Manager)等,截至某时间点,Pulsar在Github上的star数量已超过10K+,共有470+个contributor,并且正在持续更新。

八、FAQs

Q1: Pulsar与传统的消息队列系统(如Kafka)相比有哪些优势?

A1: Pulsar与传统的消息队列系统相比,具有以下优势:支持多租户、灵活的消息系统(统一了队列模型和流模型)、云原生架构(计算与存储分离)、跨地域复制、极低的发布延迟和端到端延迟、简单的客户端API(支持多种语言)、分层存储等。

Q2: Pulsar如何保证消息的可靠性和顺序性?

A2: Pulsar通过Apache BookKeeper提供的持久化消息存储机制来保证消息的可靠性,对于顺序性,Pulsar在独占和灾备订阅模式下能够保证消息的顺序性,在共享订阅模式下,虽然消息不能保证有序,但可以通过设置合适的消息key来实现一定程度的顺序性,Pulsar还支持数据的落盘和压缩功能,以确保在系统故障时数据不会丢失。

小伙伴们,上文介绍了“pulsar”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

0