第30期:《Apache Pulsar 原理解析与应用实践》|已结束

Pulsar是一个集消息传递、消息存储、轻量化函数式计算于一体的云原生流数据平台。Pulsar提供数据存储与消费能力,凭借优秀的架构设计、强大的可扩展性,在消息队列、流数据处理等多个领域被广泛使用。

Pulsar 的优势

开源领域中有诸多优秀开源消息队列,例如 RabbitMQ、Apache RocketMQ、Apache ActiveMQ 和 Apache Kafka。

在前人的基础上,Pulsar 实现了很多上一代消息系统或者上一代流数据系统没有实现的功能和特性,比如云原生、多租户、存储与计算分离、分层存储这些特性。针对之前消息队列系统的痛点,Pulsar 做了很多针对化的解决措施。

什么是 Pulsar?

(1)Pulsar 是一个分布式消息平台,可以同时处理流式数据和异构系统这两类问题。Pulsar 具有非常灵活的消息传递模型,为了实现更加丰富的消费模式,Pulsar 提出了订阅的概念。订阅是一个数据消费的规则,它决定了如何将消息传递给消费者,通过不同的订阅模式决定多个消费者在消费时的不同行为。

(2)Pulsar 是一个集消息传递、消息存储、轻量化函数式计算为一体的流数据平台。Pulsar 不仅提供了数据的存储与消费能力,还提供了一定的流处理能力。

(3)Pulsar 是一个分布式可扩展的流式存储系统,并在数据存储的基础上构建了消息队列和流服务的统一模型。这使得 Pulsar 不仅有消息队列的功能(类似 RabbitMQ 和 RocketMQ 在业务系统中的使用),还是一个数据流的处理模型(类似 Kafka 在大数据系统中的定位)。

云原生架构

云原生是一种在云计算时代构建和运行应用程序的方法,可以充分利用和发挥云平台的弹性自动化优势。云原生应用程序在云上以最佳方式运行,让业务系统的可用性、敏捷性和可扩展性得到大幅提升。

Pulsar 是在消息队列领域里基于云原生基础架构设计的产品,拥有诸多云原生应用特性,如无状态计算层、计算与存储分离,可以很好地利用云的弹性(伸缩能力),保证具有足够的可扩容性和容错性,能够很好地在容器化环境中运行。

Pulsar 的存储与计算分离架构在云原生环境中有着更大的价值。Pulsar 实例中的存储节点可以由一组 Bookie 容器去负责,计算节点又是由另外一组 Broker 容器去负责。存储与计算节点可以完全独立扩缩容,通过 Kubernetes 这样的容器编排工具,业务方可以很快地构建弹性扩缩容的云原生消息队列。

存储与计算分离

Pulsar 是一个存储与计算分离的消息队列,其中提供的计算服务的角色被称为 Broker,提供存储服务的角色被称为 Bookie。Broker 是服务端的一个无状态组件,主要负责两类职能:数据的生产消费与 Pulsar 管理。真正扛起存储重任的是 BookKeeper。

Broker 服务是无状态的,在计算资源不足时可独立进行扩容。Bookie 是有状态的存储服务,Pulsar 中的数据会以数据块的形式分配在不同的 Bookie 节点中。当存储资源不够时,可通过增加 Bookie 节点的形式进行扩容。Pulsar 会感知 Bookie 集群的变化,并在合适的时机使用新增加的 Bookie 节点进行存储,避免了人为迁移数据的运维操作。Broker 服务与 Bookie 服务的扩容相互独立,避免了资源浪费,提供了 Pulsar 的可维护性。

分层存储

BookKeeper 集群可以使用廉价的机械硬盘作为存储介质。但是在部署 BookKeeper 集群的过程中,为了最大程度提升写入与读取能力,有可能会选择带有固态硬盘(SSD)的机器,这些机器成本较为昂贵。

Pulsar 是一个存储与计算分离的消息队列,消息最初会存储在 BookKeeper 集群中,通过内部管理组件进行抽象管理。数据管理的基本单位是数据段,其中数据删除与创建的基本单位也是数据段。Pulsar 社区提供了分层存储的能力,在服务端提供了数据卸载功能,可以将每个逻辑上的数据段从 BookKeeper 存储切换为其他类型的存储。

Pulsar 的分层存储功能允许将较旧的积压数据卸载到长期存储中,例如 Hadoop HDFS 或 Amazon S3 存储,从而释放 BookKeeper 中的空间并降低存储成本。通过分层存储可以实现消息队列中的冷数据与热数据分离,让成本更加可控。

可拔插协议处理

在 Pulsar 中支持可插拔的协议处理机制,Pulsar 可以在运行时动态加载额外的协议处理程序并支持其他消息协议。基于消息队列协议层,目前 Pulsar 已经支持了 Kafka、RocketMQ、AMQP 和 MQTT 等多种协议。基于消息队列协议层,Pulsar 可以将自身云原生、分层存储、自动负载管理等诸多特性推广至更多的消息队列系统中

Pulsar 协议层支持的 Kafka 项目为 KafkaOn Pulsar(KoP)。将 KoP 协议部署在现有的 Pulsar 集群中,用户可以在 Pulsar 集群中继续使用原生 Kafka 协议,同时能够利用 Pulsar 的强大功能,完善存量 Kafka 应用的使用体验。

数据可靠性

Pulsar 可以通过幂等性生产者在单个分区上写入数据,并保证其可靠性。通过客户端的自增序列 ID、重试机制与服务端的去重机制,幂等生产者可以保证发送到单个分区的每条消息只会被持久化一次,且不会丢失数据。

另外,Pulsar 事务中的所有生产或消费操作都作为一个单元提交。一个事务中的所有操作要么全部提交,要么全部失败。Pulsar 保障每条消息只写入或处理一次,即使发生故障也不会丢失数据或重复。如果事务中止,则该事务中的所有写入和确认都将自动回滚。综上所述,可以发现 Kafka 与 Pulsar 的事务功能都是为了支持精确一次语义的。

丰富的生态支持

当用户在使用消息队列或者流式服务时,有时遇到的应用场景仅是对消息进行搬运,或者进行一些简单的统计、过滤、汇总等操作。通过 Pulsar Function 就可以原生支持这些功能。官方提供了多种导入数据与导出数据的连接器。通过 Pulsar I/O 提供的能力可以通过简单的配置,灵活地将 Pulsar 与外部系统相结合,例如关系型数据库、非关系型数据库(如 MongoDB)、数据湖、Hadoop 生态等。

Kafka 依旧优秀

在笔者遇到的业务挑战中,即使是国内的头部游戏业务冲击下,在合理的配置与使用中,Kafka 依旧十分稳健。

什么样的场景下可以继续用 Kafka? 大部分情况下都可以毫不犹豫的选择 Kafka

在集群内 topic 不多或 topic 增长速度不是特别快的情况下,Kafka 依旧是很好的选择。

不需要复杂的企业级场景的时候,Kafka 仍旧是首选。例如不需要多租户与云原始等特性时,不需要应对特别复杂的吞吐量挑战时,不需要分层存储等特性时,

Kafka 原生的集群模式使用简单,能满足大部分业务的需要。Kafka 生态更加完善,国内外的资料与先驱者更加多,在遇到 Kafka 问题时,求取解决方案的途径会更加简单。

不可否认,复杂的架构势必会带来新的优势,但是也会带来复杂性的提高,进而导致出现问题的概率会增加。使用 Pulsar 早期版本时,有时会遇到一些奇怪的 bug,需要开发与维护人员更多的知识储备与问题处理能力!

image

社区赠书

本次福利将送出《Apache Pulsar 原理解析与应用实践》 * 5本

截止时间:还需要支付积分,就还有赠书额度,先到先得

领取方式

第一步:支付积分购买抽奖资格,复制“ 积分支付订单号 ”

第二步:私信我 积分支付订单号、活动书名、快递信息(姓名、电话、地址)

没有积分怎么办?

社区鼓励高质量的技术交流,所以只要发布有价值内容均可获得积分!

哪些内容算高质量?

1. 高质量的技术分享,原创、翻译、转载均可

2. 高质量的提问与回答,注意阅读《提问的艺术》

3. 分享优质Java与Spring的相关开源项目,板块:https://spring4all.com/forum/55.html

4. 分享优质资源(学习、软件等各种你觉得不错的资源),板块:https://spring4all.com/forum/123.html

5. 分享能够提高效率的软件工具,板块:https://spring4all.com/forum/53.html

另外,内容不错,获得精华贴、或者热门帖还有额外加分哦~

THE END
喜欢就支持一下吧
点赞3 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容