Pulsar核心概念和入门指南

一、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计算存储混

七、适用场景

  1. 实时数据处理:日志收集、实时分析
  2. 多租户应用:SaaS平台、云服务
  3. 跨地域业务:全球业务部署,数据跨机房同步
  4. 高吞吐场景:日均千亿级消息处理
  5. 流式计算:与Pulsar Functions结合实现流处理

八、为什么使用Pulsar?

  • 计算存储分离:灵活扩展,运维简单
  • 多租户支持:企业级应用必备
  • 跨地域复制:保证高可用
  • 高性能:低延迟、高吞吐
  • 云原生友善:完美适配Kubernetes

Pulsar作为下一代消息队列中间件,其设计思想和架构优势使其成为大数据和实时处理领域的优秀选择。理解其核心概念和架构,是使用Pulsar的第一步。

© 版权声明

相关文章

1 条评论

您必须登录才能参与评论!
立即登录