Use Aliyun OSS offloader with Pulsar

本章将一步一步的指导你完成在 Pulsar 中安装和配置阿里云对象存储服务 (OSS) offloader。

安装

请按照以下步骤安装阿里云 OSS offloader。

前提条件

  • Pulsar:2.8.0 或更高版本

步骤

下列示例将使用 Pulsar 2.8.0。

  1. 请点击 这里 下载 Pulsar 压缩包。

  2. 下载并解压 Pulsar offloader 包,然后将 Pulsar offloader 作为 offloaders 复制到 Pulsar 目录中,参见 [此处](https://pulsar.apache.org/docs/en/standalone/# install-tiered-storage-offloaders-optional)。

    输出

    如输出所示,Pulsar 使用 Apache jclouds 来支持 AWS S3GCSAzure阿里云 OSS 用于长期存储。

    1. tiered-storage-file-system-2.8.0.nar
    2. 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.confstandalone.conf 中配置阿里云 OSS offloader driver。

  • 以下为必选 配置。

    必选配置说明示例值
    managedLedgerOffloadDriverOffloader driver 名称,不区分大小写aliyun-oss
    offloadersDirectoryOffloader 目录offloaders
    managedLedgerOffloadBucketBucketpulsar-topic-offload
    managedLedgerOffloadServiceEndpointEndpointhttp://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

  1. managedLedgerOffloadBucket=pulsar-topic-offload

Endpoint (必选)

Endpoint 是指 bucket 所处的区域。

提示

有关阿里云 OSS 区域和终端的更多信息,请参见 国际网站中国网站

示例

下面的例子将 endpoint 设置为oss-us-west-1-internal

  1. managedLedgerOffloadServiceEndpoint=http://oss-us-west-1-internal.aliyuncs.com

身份验证 (必选)

你需要对阿里云 OSS 进行认证才能够访问 。

conf/pulsar_env.sh中设置了环境变量ALIYUN_OSS_ACCESS_KEY_IDALIYUN_OSS_ACCESS_SECRET

“export” 命令很重要,以便变量在生成进程的环境中可用。

  1. export ALIYUN_OSS_ACCESS_KEY_ID=ABC123456789
  2. export ALIYUN_OSS_ACCESS_KEY_SECRET=ded7db27a4558e2ea8bbf0bf37ae0e8521618f366c

读取/写入的数据块大小

你可以在配置文件broker.confstandalone.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.confstandalone.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。

  1. 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 的运行。

    1. bin/pulsar-admin topics offload --size-threshold 10M my-tenant/my-namespace/topic1

    输出

    1. 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 的状态。

    1. bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1

    输出

    1. Offload is currently running

    要等待 Aliyun OSS offloader 完成任务,请添加 -w 参数。

    1. bin/pulsar-admin topics offload-status -w persistent://my-tenant/my-namespace/topic1

    输出

    1. Offload was a success

    如果卸载时出现错误,错误会返回到 pulsar-admin topics offload-status 命令。

    1. bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1

    输出

  1. 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= `
  1. > **提示**
  2. >
  3. > 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-).

```