一、Pulsar是什么?
一句话解释:Pulsar是Apache软件基金会顶级开源项目,是一个云原生分布式消息流平台,专为大规模实时数据处理设计。
核心特点:
- 高吞吐、低延迟(毫秒级响应)
- 计算与存储分离架构
- 多租户支持
- 原生支持跨地域数据复制
- 云原生友善(完美契合Kubernetes)
二、Pulsar核心概念(简单比喻理解)
1. 租户(Tenant)
比喻:公司
描述:Pulsar的最上层单位,代表一个业务线或团队,每个租户有独立的认证、授权和配额管理
2. 命名空间(Namespace)
比喻:公司内部的部门
描述:租户下的逻辑分组,用于管理相关主题,可以为不同命名空间设置不同的策略(如保留策略、订阅类型等)
3. 主题(Topic)
比喻:部门的邮件组
描述:
- 消息发布和订阅的基本单元
- 两种类型:
- 持久化主题:消息会持久化到磁盘(默认)
- 非持久化主题:消息只在内存中(适用于高吞吐、低可靠性场景)
4. 订阅(Subscriptions)
比喻:邮件组的订阅方式
描述:消费者与主题的绑定关系,主要有四种类型:
- 独占订阅:只有一个消费者可以订阅(类似”专属邮件组”)
- 共享订阅:多个消费者共享主题,消息轮询分发(类似”群组邮件”)
- 故障转移订阅:多个消费者,只有一个活跃消费,其他备用(类似”主备邮件组”)
- Key_Shared订阅:基于消息Key分发,一样Key消息到同一消费者
5. 分区(Partition)
比喻:邮件组的分类
描述:主题的逻辑分区,用于提高吞吐量,Pulsar将数据均匀分布到多个bookie节点
三、Pulsar架构特点(计算存储分离)
Pulsar架构:
计算层(Broker) → 无状态,负责消息分发
│
├─ 存储层(BookKeeper) → 有状态,负责消息持久化
│ │
│ ├─ Bookie(存储节点) → 消息实际存储位置
│ │
│ └─ BookKeeper(分布式WAL系统) → 负责消息复制和可靠性
│
└─ 协调层(ZooKeeper) → 存储集群元数据
关键点:
- Broker无状态:可以轻松水平扩展,故障恢复快
- BookKeeper有状态:消息存储在多个Bookie上,保证高可用
- 计算存储分离:扩展计算层(Broker)或存储层(Bookie)可以独立进行
四、Pulsar与Kafka对比
|
特性 |
Pulsar |
Kafka |
|
架构 |
计算存储分离 |
计算存储一体 |
|
存储单元 |
Segment(分片) |
Partition(分区) |
|
扩展性 |
独立扩展计算和存储 |
扩展受最小节点限制 |
|
多租户 |
原生支持 |
需额外配置 |
|
跨地域复制 |
原生支持 |
需额外配置 |
|
数据模型 |
一数据多消费 |
一数据一消费 |
简单记忆:Pulsar是”计算无状态,存储有状态”,Kafka是”计算存储一体”。
五、Pulsar入门使用
1. 安装与启动(单机模式)
# 1. 安装JDK
sudo apt install -y openjdk-8-jdk
# 2. 下载Pulsar
wget https://archive.apache.org/dist/pulsar/pulsar-2.10.0/apache-pulsar-2.10.0-bin.tar.gz
tar -xzvf apache-pulsar-2.10.0-bin.tar.gz
# 3. 配置单机模式
# 修改conf/standalone.conf
managedLedgerDefaultEnsembleSize=1
managedLedgerDefaultWriteQuorum=1
managedLedgerDefaultAckQuorum=1
# 4. 启动Pulsar
bin/pulsar standalone
2. 基本操作(Pulsar Shell)
# 创建命名空间
bin/pulsar-admin namespaces create public/default
# 创建主题
bin/pulsar-admin topics create persistent://public/default/my-topic
# 发送消息
bin/pulsar-client produce persistent://public/default/my-topic -m "Hello Pulsar"
# 消费消息
bin/pulsar-client consume persistent://public/default/my-topic -s "my-subscription" -n 1
3. Python客户端示例
# 安装客户端
pip install pulsar-client
# 生产者
import pulsar
client = pulsar.Client('pulsar://localhost:6650')
producer = client.create_producer('persistent://public/default/my-topic')
producer.send("Hello Pulsar".encode('utf-8'))
client.close()
# 消费者
client = pulsar.Client('pulsar://localhost:6650')
consumer = client.subscribe('persistent://public/default/my-topic', 'my-subscription')
msg = consumer.receive()
print("Received message: '%s'" % msg.data().decode('utf-8'))
consumer.acknowledge(msg)
client.close()
六、简单记忆口诀
- Pulsar三核心:租户、命名空间、主题
- 订阅四类型:独占、共享、故障转移、Key_Shared
- 架构两分离:计算无状态,存储有状态
- Pulsar vs Kafka:Pulsar计算存储分,Kafka计算存储混
七、适用场景
- 实时数据处理:日志收集、实时分析
- 多租户应用:SaaS平台、云服务
- 跨地域业务:全球业务部署,数据跨机房同步
- 高吞吐场景:日均千亿级消息处理
- 流式计算:与Pulsar Functions结合实现流处理
八、为什么使用Pulsar?
- 计算存储分离:灵活扩展,运维简单
- 多租户支持:企业级应用必备
- 跨地域复制:保证高可用
- 高性能:低延迟、高吞吐
- 云原生友善:完美适配Kubernetes
Pulsar作为下一代消息队列中间件,其设计思想和架构优势使其成为大数据和实时处理领域的优秀选择。理解其核心概念和架构,是使用Pulsar的第一步。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
您必须登录才能参与评论!
立即登录



收藏了,感谢分享