Apache Pulsar是一个开源的分布式消息队列产品,最早是由 Yahoo 开发,现在是 Apache 基金会旗下的开源项目。
Pulsar 的架构和其他消息队列有什么不同?
Pulsar 和其他消息队列最大的区别是,它采用了存储计算分离的设计。存储消息的职责从 Broker 中分离出来,交给专门的 BookKeeper 存储集群。这样 Broker 就变成了无状态的节点,在集群调度和故障恢复方面更加简单灵活。
先来看图中右侧的 Bookie 和 ZK 这两个方框,这两个方框分别代表了 BookKeeper 集群和 ZooKeeper 集群,左侧是Brocker集群。
- ZK集群,用于选举主节点和保存元数据;
- BookKeeper 存储消息的地方,有点儿类似 HDFS,是一个分布式的存储集群,只不过它的存储单元和 HDFS 不一样,在 HDFS 中存储单元就是文件,这个很好理解。而 BookKeeper 的存储单元是 Ledger;
- Brocker集群,不存储消息的无状态路由计算节点,Load Balancer 负责动态的分配,哪些 Broker 管理哪些主题分区。Managed Ledger 这个模块负责管理本节点需要用到的那些 Ledger,当然这些 Ledger 都是保存在 BookKeeper 集群中的。为了提升性能,Pulsar 同样采用用了一个 Cache 模块,来缓存一部分 Ledger。
图中的 Global replicators 模块虽然也会复制消息