Pulsar Tiered Storage(分层存储) 是 Pulsar 实现 大规模历史数据低成本存储与高效查询 的核心技术。它通过将“冷数据”从本地高性能存储(SSD)自动卸载到低成本对象存储(如 AWS S3、Google Cloud Storage、Azure Blob、HDFS 等),实现了 存储成本优化 与 无限数据保留 的能力。
在大数据、合规审计、事件溯源等场景中,Tiered Storage 让 Pulsar 不仅是一个消息系统,更成为一个 流式数据湖(Streaming Data Lake)。
📘 Pulsar Tiered Storage 深入:优化大规模历史数据存储和查询效率 详解
一、Tiered Storage 的核心价值
| 价值 | 说明 |
|---|---|
| ✅ 降低存储成本 | 本地 SSD → 云存储,成本降低 5~10 倍 |
| ✅ 无限数据保留 | 满足 7 年合规、审计、重放需求 |
| ✅ 释放 Bookie 空间 | 防止磁盘打满,提升系统稳定性 |
| ✅ 解决碎片问题 | 归档后 Entry Log 可被 GC 回收 |
| ✅ 支持历史数据查询 | 消费者可透明读取归档数据 |
✅ 类比:数据库的“冷热分离”或 Kafka 的 Tiered Storage。
二、Tiered Storage 架构与组件
+---------------------+
| Pulsar Broker |
| - 控制 Offload 流程 |
| - 处理归档数据读取 |
+----------+----------+
|
v
+----------+----------+
| Apache BookKeeper |
| - 存储“热数据” |
| - Ledger 存储单元 |
+----------+----------+
|
v
+----------+----------+
| Tiered Storage |
| (S3 / GCS / HDFS) |
| - 存储“冷数据” |
| - 按 Ledger 打包存储 |
+----------+----------+
|
v
+----------+----------+
| Consumer / Flink |
| - 透明读取归档数据 |
+---------------------+
- Ledger 是归档的基本单位。
- 归档后,本地 Ledger 文件可被 GC 回收。
三、归档(Offload)触发机制
1. 自动触发(推荐)
# broker.conf
managedLedgerOffloadEnabled=true
managedLedgerOffloadThreshold=1073741824 # 1GB
managedLedgerMaxMarkDeleteLedgerAgeIntervalInMinutes=360 # 6小时
- 当 Ledger 关闭 且满足以下任一条件时触发:
- 大小 ≥
offloadThreshold - 年龄 ≥
maxMarkDeleteLedgerAge
- 大小 ≥
✅ 归档是异步的,不影响写入性能。
2. 手动触发
pulsar-admin topics offload persistent://public/default/my-topic
pulsar-admin topics offload-status persistent://public/default/my-topic
用于测试或紧急归档。
四、支持的 Tiered Storage 后端
| 存储类型 | 插件名称 | 说明 |
|---|---|---|
| AWS S3 | S3ManagedLedgerOffloader | 最常用,支持 KMS 加密 |
| Google Cloud Storage (GCS) | GCSOffloader | GCP 用户首选 |
| Azure Blob Storage | AzureBlobStorageOffloader | Azure 用户 |
| HDFS | HDFS2Offloader | 大数据生态集成 |
| Aliyun OSS | OSSManagedLedgerOffloader | 阿里云用户 |
| FileSystem | FileManagedLedgerOffloader | 本地 NAS(测试用) |
✅ 插件位于
offloaders/目录下,需单独下载。
五、归档数据的存储格式
- 每个 Ledger 被打包为一个文件上传。
- 文件格式:Sequence File 或 Index + Entry 块
- 元数据存储在 ZooKeeper,记录:
- Ledger ID
- 存储位置(S3 path)
- 大小、时间戳
✅ 支持压缩(ZSTD、LZ4)以减少传输成本。
六、查询效率优化策略
虽然归档数据在远程存储中,但通过以下机制可优化查询效率:
1. 透明读取(Transparent Read)
- 消费者无需修改代码。
- 当读取已归档的 Ledger 时:
- Broker 检测到数据在 S3/GCS。
- 从云存储下载数据(可缓存)。
- 返回给消费者。
⚠️ 首次读取有延迟(取决于网络和文件大小)。
2. Broker 缓存(Cache)
- Broker 可缓存最近访问的归档数据。
- 减少重复下载。
# broker.conf
managedLedgerOffloadCacheEnabled=true
managedLedgerOffloadCacheMaxSizeMB=1024 # 1GB 缓存
3. 预加载(Prefetch)
- 在预期访问前主动下载归档数据。
- 适用于定时任务、报表生成。
4. 与流处理引擎集成
- Flink / Spark 消费归档数据进行批处理。
- 利用计算引擎的并行读取能力。
// Flink 从 Pulsar 读取历史数据
PulsarSource.builder()
.startingOffsets(START_FROM_EARLIEST)
.build();
✅ 从任意时间点读取,包括已归档数据。
七、性能调优与成本优化
1. 归档性能调优
# broker.conf
s3ManagedLedgerOffloadMaxBlockSizeInBytes=67108864 # 64MB
s3ManagedLedgerOffloadReadBufferSizeInBytes=1048576 # 1MB
s3ManagedLedgerOffloadMaxConcurrentRequests=10 # 并发上传
s3ManagedLedgerOffloadMaxPendingQueueSizeBytes=1073741824 # 1GB
✅ 增大并发和块大小可提升归档速度。
2. 成本优化建议
| 策略 | 说明 |
|---|---|
| ✅ 使用 S3 Intelligent-Tiering | 自动在标准/低频/归档层间迁移 |
| ✅ 启用 S3 Glacier Deep Archive | 7 年合规数据用最低成本存储 |
| ✅ 压缩数据 | 上传前启用 ZSTD 压缩 |
| ✅ 限制归档频率 | 避免小文件频繁上传 |
| ✅ 监控传输成本 | AWS Cost Explorer |
八、监控与诊断
1. 关键 Prometheus 指标
| 指标 | 说明 |
|---|---|
pulsar_broker_leger_offloader_success_count | 成功 offload 次数 |
pulsar_broker_leger_offloader_failure_count | 失败次数 |
pulsar_broker_leger_offloader_duration_ms | offload 耗时 |
bookie_disk_usage | 本地磁盘使用率(应下降) |
2. 常用命令
# 查看 offload 状态
pulsar-admin topics offload-status my-topic
# 手动触发 offload
pulsar-admin topics offload my-topic
# 查看归档配置
pulsar-admin namespaces get-offload-policies my-namespace
九、典型应用场景
1. 金融交易审计
- 所有交易消息保留 7 年。
- 使用 S3 Glacier Deep Archive 存储。
- 审计时通过 Flink 重放分析。
2. IoT 数据长期存储
- 百万设备上报数据,保留 5 年。
- 热数据在 Bookie,冷数据在 GCS。
- 按设备 ID 查询历史数据。
3. 日志分析平台
- 日志消息归档到 HDFS。
- 使用 Spark SQL 进行离线分析。
- 支持按时间范围查询。
十、最佳实践总结
| 实践 | 建议 |
|---|---|
| ✅ 生产环境必开 Tiered Storage | 防止磁盘打满 |
| ✅ 选择合适的存储后端 | S3/GCS 用于云,HDFS 用于大数据 |
| ✅ 启用缓存 | 减少重复下载延迟 |
| ✅ 监控 offload 失败率 | 网络、权限问题可能导致失败 |
| ✅ 结合 TTL 策略 | 归档后仍可设置自动删除 |
| ✅ 测试读取性能 | 确保业务可接受延迟 |
| ✅ 使用 KMS 加密 | 保证归档数据安全 |
✅ 总结
| 能力 | 说明 |
|---|---|
| ✅ 低成本存储 | 本地 SSD → 云存储,成本大幅降低 |
| ✅ 无限保留 | 满足合规与审计需求 |
| ✅ 透明访问 | 消费者无感知读取归档数据 |
| ✅ 高效查询 | 缓存 + 预加载 + 流处理引擎 |
| ✅ 生态集成 | 与 Flink、Spark、Presto 无缝集成 |
📌 一句话总结:
Pulsar Tiered Storage 是“流式数据湖的基石” —— 它让 Pulsar 不仅是一个消息系统,更成为一个支持 低成本、长期保留、高效查询 的统一事件存储平台,真正实现“一次写入,多场景消费”。
Pulsar Tiered Storage 优化数据存储查询
429

被折叠的 条评论
为什么被折叠?



