Apache Pulsar[3] 概念进阶

订阅模型

Pulsar提供了灵活的消息模型,支持三种订阅类型:

  • Exclusive subscription:排他,只能有一个Consumer,接收一个Topic所有的消息
  • Shared subscription:共享,可以同时存在多个Consumer,每个Consumer处理Topic中一部消息(Shared模型是不保证消息顺序的,Consumer数量可以超过分区的数量)
  • Failover subscription:灾备模式,同一时刻只有一个有效的Consumer,其余的Consumer作为备用节点,在Master Consumer不可用后进行替代(看起来适用于数据量小,且解决单点故障的场景)


    image.png

分区

为了解决吞吐等问题,Pulsar和Kafka一样,采用了分区(Partition)的机制。


image.png

Pulsar提供了一些策略来处理消息到Partition的路由(MessageRouter):

  • Single partitioning:Producer随机选择一个Partition并将所有消息写入到这个分区
  • Round robin partitioning :采用Round robin的方式,轮训所有分区进行消息写入
  • Hash partitioning:这种模式每条消息有一个Key,Producer根据消息的Key的哈希值进行分区的选择(Key相同的消息可以保证顺序)。默认
  • Custom partitioning:用户自定义路由策略

持久化

Pulsar通过BookKeeper来存储消息,保证消息不会丢失


image.png

Pulsar采用“存储和服务分离”的两层架构(这是Pulsar区别于其他MQ系统最重要的一点,也是所谓的“下一代消息系统”的核心):

Broker:提供发布和订阅的服务(Pulsar的组件)
Bookie:提供存储能力(BookKeeper的存储组件)
通过两层架构使broker变成无状态,可以水平扩容。高可靠和一致性通过bookkeeper保证。

数据复制

image.png
  • 采用ZooKeeper存储元数据,集群配置,作为协调器
    -- local zk负责Pulsar Cluster内部的配置等
    -- global zk则用于Pulsar Cluster之间的数据复制等
  • 采用Bookie作为存储设备
  • Broker负责负载均衡和消息的读取、写入等
  • Global replicators负责集群间的数据复制

GEO-REPLICATION(地理复制)

多个Broker节点组成一个Pulsar Cluster;多个Pulsar Cluster组成一个Pulsar Instance。
Pulsar通过GEO-REPLICATION支持一个Instance内在不同的地域发送和消费消息。


image.png

在这个图中,每当 P1、P2 和 P3 的生产者分别向Cluster-A、Cluster-B和Cluster-C 中的T1 topic发送消息时,这些消息很快在不同的集群中复制,C1,C2可以在自己的集群内消费到所有的数据。

你可能感兴趣的:(Apache Pulsar[3] 概念进阶)