Use Aliyun OSS offloader with Pulsar
本章将一步一步的指导你完成在 Pulsar 中安装和配置阿里云对象存储服务 (OSS) offloader。
安装
请按照以下步骤安装阿里云 OSS offloader。
前提条件
- Pulsar:2.8.0 或更高版本
步骤
下列示例将使用 Pulsar 2.8.0。
请点击 这里 下载 Pulsar 压缩包。
下载并解压 Pulsar offloader 包,然后将 Pulsar offloader 作为
offloaders
复制到 Pulsar 目录中,参见 [此处](https://pulsar.apache.org/docs/en/standalone/# install-tiered-storage-offloaders-optional)。输出
如输出所示,Pulsar 使用 Apache jclouds 来支持 AWS S3、GCS、Azure 和 阿里云 OSS 用于长期存储。
tiered-storage-file-system-2.8.0.nar
tiered-storage-jcloud-2.8.0.nar
Note
如果你在裸机集群中运行 Pulsar,请确保在每个 broker 的 Pulsar 目录中解压
offloaders
压缩包。如果你在 Docker 中运行 Pulsar 或使用 Docker 镜像 (如 K8s 和 DCOS) 部署 Pulsar,你可以使用
apachepulsar/pulsar-all
镜像。apachepulsar/pulsar-all
镜像已经绑定了分层存储 offloader。
Configuration
Note
在将数据从 BookKeeper 转移到阿里云 OSS 之前,你需要配置阿里云 OSS offload driver 的一些属性。
此外,你还可以配置阿里云 OSS offloader 的自动触发和手动触发机制。
配置阿里云 OSS offloader driver
你可以在配置文件 broker.conf
或 standalone.conf
中配置阿里云 OSS offloader driver。
以下为必选 配置。
必选配置 说明 示例值 managedLedgerOffloadDriver
Offloader driver 名称,不区分大小写 aliyun-oss offloadersDirectory
Offloader 目录 offloaders managedLedgerOffloadBucket
Bucket pulsar-topic-offload managedLedgerOffloadServiceEndpoint
Endpoint http://oss-cn-hongkong.aliyuncs.com 以下为可选 配置。
可选 说明 示例值 managedLedgerOffloadReadBufferSizeInBytes
读取的数据块大小 1 MB managedLedgerOffloadMaxBlockSizeInBytes
写入的数据块大小 64 MB managedLedgerMinLedgerRolloverTimeMinutes
一个 topic ledger 翻转的最小时间
注意 :不建议你在生产环境中设置这种配置。2 managedLedgerMaxEntriesPerLedger
触发翻转前追加到 ledger 的最大条目数。
注意 :不建议你在生产环境中设置这种配置。5000
Bucket (必选)
一个 bucket 就是一个存储数据的基本容器。 你在阿里云 OSS 中存储的所有东西都必须包含在一个 bucket 里。 您可以使用 bucket 来管理数据并控制对数据的访问,但与目录和文件夹不同,你不能嵌套 bucket。
示例
该示例将 bucket 命名为 pulsar-topic-offload。
managedLedgerOffloadBucket=pulsar-topic-offload
Endpoint (必选)
Endpoint 是指 bucket 所处的区域。
提示
示例
下面的例子将 endpoint 设置为oss-us-west-1-internal。
managedLedgerOffloadServiceEndpoint=http://oss-us-west-1-internal.aliyuncs.com
身份验证 (必选)
你需要对阿里云 OSS 进行认证才能够访问 。
在conf/pulsar_env.sh
中设置了环境变量ALIYUN_OSS_ACCESS_KEY_ID
和ALIYUN_OSS_ACCESS_SECRET
。
“export” 命令很重要,以便变量在生成进程的环境中可用。
export ALIYUN_OSS_ACCESS_KEY_ID=ABC123456789
export ALIYUN_OSS_ACCESS_KEY_SECRET=ded7db27a4558e2ea8bbf0bf37ae0e8521618f366c
读取/写入的数据块大小
你可以在配置文件broker.conf
或standalone.conf
中配置发送到阿里云 OSS 或从阿里云OSS读取的请求大小。
Configuration | 说明 | 默认值 |
---|---|---|
managedLedgerOffloadReadBufferSizeInBytes | 从 阿里云 OSS 读取数据时每个块的大小。 | 1 MB |
managedLedgerOffloadMaxBlockSizeInBytes | 在向阿里云上传多部分数据时每部分的最大大小。 它不能小于5MB。 | 64 MB |
自动运行阿里云 OSS offloader
命名空间策略可以配置成一旦到达阈值就自动卸载数据。 该阈值基于一个 topic 在 Pulsar 集群的数据存储大小而定。 一旦 topic 到达阈值,就自动触发卸载操作。
阈值 | 触发的操作 |
---|---|
> 0 | 如果 topic 存储达到其阈值,它就会触发 offloading 操作。 |
= 0 | 它使 broker 竭尽全力地 offload 数据。 |
< 0 | 它禁用自动 offloading 操作。 |
当一个新 segment 添加到 topic 日志后会自动运行卸载。 如果你在命名空间上设置了阈值,但向该 topic 生产的消息很少,offloader 将会停止工作,直至当前 segment 达到饱和。
你可以通过命令行工具(CLI)设置阈值大小,比如 pulsar-admin。
broker.conf
和 standalone.conf
中的卸载配置文件,主要适用于没有命名空间级别卸载策略的命名空间中。 每个命名空间可以有自己的卸载策略。 If you want to set offload policy for each namespace, use the command pulsar-admin namespaces set-offload-policies options
command.
示例
该示例使用pulsar-admin将阿里云 OSS offloader 的阈值大小设置为10MB。
bin/pulsar-admin namespaces set-offload-threshold --size 10M my-tenant/my-namespace
提示
For more information about the
pulsar-admin namespaces set-offload-threshold options
command, including flags, descriptions, and default values, see here.
手动运行阿里云 OSS offloader
对于每一个 topic,你可以使用下列方法来手动触发阿里云 OSS offloader:
使用 REST endpoint。
使用命令行工具(例如 pulsar-admin)。
要想用命令行工具触发,你要指定一个 Topic 应该保留在 Pulsar 集群中的最大数据量(阈值)。 如果 Pulsar 集群上 topic 的数据大小超过了这个阈值,那么该 topic 下的 segment 就会被陆续转移到阿里云 OSS 上,直到不再超过这个阈值。 优先移动旧的 segment。
示例
该示例使用 pulsar-admin 手动触发了阿里云 OSS offloader 的运行。
bin/pulsar-admin topics offload --size-threshold 10M my-tenant/my-namespace/topic1
输出
Offload triggered for persistent://my-tenant/my-namespace/topic1 for messages before 2:0:-1
提示
For more information about the
pulsar-admin topics offload options
command, including flags, descriptions, and default values, see here.该示例使用 pulsar-admin 检查阿里云 OSS offloader 的状态。
bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
输出
Offload is currently running
要等待 Aliyun OSS offloader 完成任务,请添加
-w
参数。bin/pulsar-admin topics offload-status -w persistent://my-tenant/my-namespace/topic1
输出
Offload was a success
如果卸载时出现错误,错误会返回到
pulsar-admin topics offload-status
命令。bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
输出
Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: java.util.concurrent.CompletionException: com.amazonaws.services.s3.model.AmazonS3Exception: Anonymous users cannot initiate multipart uploads. Please authenticate. (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 798758DE3F1776DF; S3 Extended Request ID: dhBFz/lZm1oiG/oBEepeNlhrtsDlzoOhocuYMpKihQGXe6EG8puRGOkK6UwqzVrMXTWBxxHcS+g=), S3 Extended Request ID: dhBFz/lZm1oiG/oBEepeNlhrtsDlzoOhocuYMpKihQGXe6EG8puRGOkK6UwqzVrMXTWBxxHcS+g= `
> **提示**
>
> For more information about the `pulsar-admin topics offload-status options` command, including flags, descriptions, and default values, see [here](https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-).
```