Apache Pulsar是一款先进的分布式发布订阅消息系统,其核心特性在于提供灵活的发布订阅模型,支持数据的有序性保证、多租户、高吞吐量、低延迟以及跨地域复制。Pulsar的设计理念是将存储和计算进行分离,采用分层分片的技术架构,以实现高度可扩展性和高可用性。
1. **Pulsar简介**
Pulsar最初由Yahoo在2012年内部开发,2016年开源,并于2017年捐赠给Apache软件基金会,2018年成为顶级项目。它拥有来自8家公司的24名贡献者和78个贡献者,服务于30多家公司,展现出强大的社区支持。Pulsar提供了至少一次、最多一次和有效一次的交付保证,确保消息传递的可靠性。
2. **分层分片架构**
Pulsar的架构分为两个主要层次:服务层(Brokers)和存储层(BookKeeper)。Brokers负责处理客户端的请求,如消息的发布和订阅,而BookKeeper则作为分布式日志存储系统,保证数据的持久化和一致性。
- **服务层**:Brokers是无状态的,可以独立扩展并实现灵活的容错。它们通过并发写入多个Bookie副本来保证数据的高可用性。
- **存储层**:BookKeeper是Pulsar的持久化存储组件,它以低延迟、高吞吐量的方式存储日志,并提供强一致性。每个Bookie节点可以存储大量日志,实现I/O隔离的读写流程。
3. **分片存储**
- **分区与分片**:Pulsar的消息存储基于逻辑分区,每个分区可以进一步细分为多个时间或大小的分片(Segments)。这些分片分散在集群的所有节点上,以提高可扩展性和容错能力。
- **物理分区与逻辑分区**:传统的物理分区模式导致存储和计算紧密耦合,容错和扩容需要拷贝整个物理分区,而Pulsar的逻辑分区和分片架构实现了存储和计算的分离,容错和扩容更加高效且无痛。
4. **容错机制**
- **Broker容错**:当一个Broker故障时,其上的主副本可以迅速转移到其他健康的Broker,保证服务的连续性。
- **Bookie容错**:BookKeeper的多副本策略保证了即使部分Bookie节点失败,数据仍然可以被读取和恢复。
5. **Benchmark与实践**
Pulsar在性能测试中表现出色,能够达到单分区1.8M消息/秒的高吞吐量,以及99分位数下的5毫秒低发布延迟。此外,Pulsar在智联等公司的实际应用中也验证了其稳定性和高性能。
总结来说,Apache Pulsar通过其创新的分层分片架构,实现了存储和计算的分离,提供了高可用、可扩展和低延迟的消息传递服务。这种架构设计使得Pulsar成为了应对大规模分布式系统消息处理挑战的有力工具,适用于各种实时数据流处理和消息队列场景。