新一代消息中间件pulsar

前言:Pulsar是什么?

     Pulsar是Apache软件基金会的一个开源项目,是下一代云原生分布式消息流平台。它提供了高性能、高可靠的企业级消息队列和流处理功能,支持多租户隔离、持久化存储、多机房跨区域数据复制等特性。Pulsar采用计算与存储分离的架构设计,支持水平动态扩容,能够处理百万级别的Topic数量,并且保持低延迟和高吞吐量。这些特性使得Pulsar非常适合于大数据生态和实时数据分析场景,如事件驱动架构、流数据处理、物联网数据采集、日志聚合等。

1. pulsar特性

  • 支持多集群部署,支持异地多集群副本备份
  • 低延迟的端到端消息发布
  • 支持扩容超过一百万个topic订阅
  • 支持多语言客户端java、go、python、c++
  • 支持消息持久化存储,保证消息可靠传递
  • 分层存储在数据老化时将数据从热/热存储卸载到冷/长期存储(如S3和GCS)

2. pulsar架构

图片

2.1. Broker

一个无状态的组件,主要运行两种服务:

  1. 一个HTTP服务器,为生产者和消费者的管理任务和主题查找公开一个REST API。生产者连接到代理以发布消息,消费者连接到代理来消费消息。
  2. 调度器,它是一个异步TCP服务器,通过用于所有数据传输的自定义二进制协议。

为提高性能使用Manageed Ledger对消息进行缓存处理,当缓存处理不过来时将调用BK(BookKeeper)获取消息。

为了支持全局主题的地理副本复制,全局复制器跟踪在本地区域发布的条目,并使用Pulsar Java客户端库将它们重新发布到远程区域。

Broker支持负载均衡,用来提高系统的可用性,平衡流量。

2.2. BookKeeper

Pulsar使用名为BookKeeper的系统进行消息存储,BookKeeper是一个分布式的WAL(Write-ahead_logging 头部写入日志)系统,该系统保证了pulsar消息的高效可靠地存储,保障了系统出现故障时消息地读取一致性。

除了消息数据外,游标还持久存储在BookKeeper中。游标是消费者的订阅位置。BookKeeper使Pulsar能够以可扩展的方式存储消费者位置。

BookKeeper存储topic的目录结构为:

persistent://租户/命名空间/topic

BookKeeper与生产者和消费者交互关系图如下:

(Bookie:BookKeeper中单个服务器节点称为Bookie)

2.3. Ledger

账本是一个仅追加写入的数据结构,通过一个单写入程序分配给多个BookKeeper进行存储,ledger会被复制分配到多个Bookies上进行备份存储。

在pulsar中可以创建一个ledger,然后将消息追加写入到ledger,然后关闭ledger。关闭后的ledger只能进行读取,不可再次进行写入。当ledger不再被需要时,可以从系统中进行删除。

Bookkeeper的主要优势在于,它保证了在出现故障时分类账中的读取一致性。由于ledger只能由一个进程写入,因此该进程可以非常有效地自由添加条目,而无需获得一致意见。失败后,ledger将经过一个恢复过程,该过程将最终确定ledger的状态,并确定上次提交到日志的条目。在那之后,ledger的所有读者都可以保证看到完全相同的内容。

2.4. Managed ledger

管理每个分区对应的Ledger,实现对数据的读取,写入,缓存和清理功能

默认每个Ledger最多存储50000条数据,通过服务端参数metadataMaxEntriesPerLedger控制

默认每个Ledger存储在3个节点上,其中2个为数据副本

管理pulsar订阅中代表消费位置的游标,包括每个游标的生命周期管理和持久化存储

ManagedCursor进行订阅读取位置的管理

BacklogQuotaManager,消息积压管理,管理数据积压配额

3. pulsar客户端

pulsar暴露了多语言的API客户端提供服务Java, C++, Go, Python, Node.js ,C#。为应用暴露了一些简单易用的方法。

Pulsar客户端库支持透明的重新连接和/或连接故障切换,当发生故障时客户端会通过重试或回滚的方式进行消息处理,直到代理程序确认消息处理成功。

生产者:生产者是一个附加到主题并向Pulsar代理发布消息的过程。Pulsar代理程序处理消息。

  1. - 消息发送模式:同步发送、异步发送
  2. - 对topic的权限模式:共享、独占、独占放弃(当有生产者连接topic后,当前生产者直接放弃连接)、等待独占(当有生产者连接topic后,当前生产者等待其断开连接)

消费者:消费者是一个通过订阅连接到主题,然后接收消息的过程。

  1. - 消息接收模式:同步接收、异步接收
  2. - 对topic的权限模式:独占、故障转移、共享(多个消费者可以添加到一个订阅,循环消费)、键共享(多个消费者可以添加到一个订阅,具有相同键的消息被特定的消费者消费)

4. 地理复制

Pulsar的地理复制机制通常用于灾难恢复,允许在多个数据中心之间复制持久存储的消息数据。

Pulasr的地理复制分为机制分为两种

  • 同步复制

在同步地理复制中,数据被同步复制到多个数据中心,客户端必须等待来自其他数据中心的确认。如下图所示,当客户端向一个集群发出写入请求时,写入的数据将被复制到其他两个数据中心。只有当大多数数据中心(在本例中,至少有2个数据中心)已经确认写入已被持久化时,才向客户端确认写入请求。

  • 异步复制

异步地理复制集群由设置在不同数据中心的多个物理集群组成。在Pulsar主题上生成的消息首先被持久化到本地集群,然后由代理异步复制到远程集群。

5. 集群故障切换

当集群网络连接异常、集群宕机时,可以使用集群故障切换将流量转移至另一个集群中。集群故障切换支持自动切换和手动切换。

  • 自动切换:

图片

自动群集级故障切换支持Pulsar客户端在根据用户设置的配置检测策略检测到故障切换事件时,自动无缝地从主群集切换到一个或多个备份群集。

  • 手动切换:

图片

受控群集级故障切换支持Pulsar客户端从主群集切换到一个或多个备份群集。切换由管理员手动设置。

6. 多租户

Pulsar是作为一个多租户系统从头开始创建的。为了支持多租户,Pulsar有一个租户概念。租户可以分布在集群中,每个租户都可以应用自己的身份验证和授权方案。它们也是可以管理存储配额、消息TTL和隔离策略的管理单元。

Pulsar的多租户特性主要体现在主题URL中,其结构如下:

persistent://tenant/namespace/topic

6.1. 租户

Pulsar租户是用于分配容量和执行身份验证或授权方案的管理单元。对于Pulsar实例中的每个租户,您可以分配:

  • 授权方案
  • 租户配置所应用的群集集

6.2. 名称空间

Pulsar名称空间是一组逻辑主题。租户和名称空间是Pulsar支持多租户的两个关键概念。

lPulsar是为指定租户提供的,并为租户分配了适当的容量。

l名称空间是租户内的管理单元命名法。在命名空间上设置的配置策略应用于在该命名空间中创建的所有主题。租户可以使用REST API和pulser-admin CLI工具通过自我管理创建多个名称空间。例如,具有不同应用程序的租户可以为每个应用程序创建一个单独的命名空间。

7. 主题压缩

对于某些场景,消费者不需要主题日志的完整“图像”。它们可能只需要几个值去构建更“浅”的日志图像,甚至可能只需要最新的值。对于这些类型的场景,Pulsar 提供了主题压缩。当您对某个主题使用压缩时,Pulsar 会遍历主题的消息积压日志,并移除旧的消息,也就是说,它会按每个键遍历主题,只留下与该键关联的最新消息。

8. 消息节流

较大的消息有效负载可能会导致内存使用率峰值,从而导致性能下降。Pulsar采用速率限制节流机制进行消息调度,避免了流量激增,提高了消息传递能力。您可以设置一个阈值来限制可以传递到客户端的消息数量和条目的字节大小,从而在每单位时间的流量超过阈值时阻止后续传递。

例如,当您将调度速率限制配置为每秒10条消息时,则每秒可以传递到客户端的消息数最多为10条。

图片

总结

       Apache Pulsar作为新一代云原生分布式消息引擎,以其高性能、低延迟、多租户隔离和灵活的消息订阅模式等特性,在消息中间件领域展现出了强大的竞争力。随着云原生和大数据技术的不断发展,Pulsar必将在更多领域发挥重要作用,助力企业构建高效、可扩展的数据处理平台。如果您正在寻找一款优秀的消息中间件来支撑您的业务发展,不妨考虑一下Apache Pulsar。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码小飞飞飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值