Use GCS offloader with Pulsar
本章将一步一步的指导你完成在 Pulsar 中安装和配置 GCS offloader。
安装
请按照以下步骤安装 GCS offloader。
前提条件
- Pulsar:2.4.2 或更高版本
步骤
下列示例将使用 Pulsar 2.5.1。
使用下列方式下载 Pulsar 压缩包:
下载并解压 Pulsar offloaders 程序包。
wget https://downloads.apache.org/pulsar/pulsar-2.5.1/apache-pulsar-offloaders-2.5.1-bin.tar.gz
tar xvfz apache-pulsar-offloaders-2.5.1-bin.tar.gz
Note
如果在一个裸机集群中运行 Pulsar,请确保
offloaders
安装包已经在 broker 的所有 pulsar 目录下解压缩。如果你在 Docker 中运行 Pulsar 或者通过 Docker 镜像 (如K8s和DCOS) 部署 Pulsar,你可以使用
apachepulsar/pulsar-all
镜像代替apachepulsar/pulsar
镜像。apachepulsar/pulsar-all
image has already bundled tiered storage offloaders.
将 Pulsar offloaders 作为
offloaders
复制到Pulsar目录中。mv apache-pulsar-offloaders-2.5.1/offloaders apache-pulsar-2.5.1/offloaders
ls offloaders
输出
如下中所示,Pulsar 使用 Apache jclouds 来支持 GCS 和AWS S3 进行长期存储。
```
tiered-storage-file-system-2.5.1.nar
tiered-storage-jcloud-2.5.1.nar
```
Configuration
Note
在将数据从 BookKeeper 卸载到 GCS 之前,你需要配置 GCS offloader driver 的一些属性。
此外,你还可以配置 GCS offloader 的自动触发和手动触发机制。
配置 GCS offloader driver
你可以在配置文件 broker.conf
或 standalone.conf
中配置 GCS offloader driver。
以下为必选 配置。
必填 配置 | 描述 | 示例值 |—-|—-|—-
managedLedgerOffloadDriver
|Offloader driver 名称,不区分大小写|google-cloud-storageoffloadersDirectory
|Offloader 目录|offloadersgcsManagedLedgerOffloadBucket
|Bucket|pulsar-topic-offloadgcsManagedLedgerOffloadRegion
|Bucket 区域|europe-west3gcsManagedLedgerOffloadServiceAccountKeyFile
|认证 |/Users/user-name/Downloads/project-804d5e6a6f33.json以下为可选 配置。
可选配置|描述|示例值 |—-|—-|—-
gcsManagedLedgerOffloadReadBufferSizeInBytes
|读取数据块的大小|1 MBgcsManagedLedgerOffloadMaxBlockSizeInBytes
|写数据块的大小|64 MBmanagedLedgerMinLedgerRolloverTimeMinutes
|一个 Topic 的 Ledger 翻转之间的最小时间|2managedLedgerMaxEntriesPerLedger
|在触发翻转之前追加到 Topic ledger 的最大条目数。|5000
Bucket (必选)
一个 bucket 就是一个存储数据的基本容器。 你存储在 GCS 中的所有东西必须包含在一个 bucket 中。 您可以使用 bucket 来管理数据并控制对数据的访问,但与目录和文件夹不同,你不能嵌套 bucket。
示例
该示例将 bucket 命名为 pulsar-topic-offload。
gcsManagedLedgerOffloadBucket=pulsar-topic-offload
Bucket 区域 (必填)
Bucket 区域是指 Bucket 所处的区域。 如果没有指定 Bucket 区域,则使用默认区域 (us multi-regional location
)。
提示
关于 Bucket 位置的更多信息,见这里。
示例
本示例将 Bucket 的区域设置为_ europe-west3 _。
gcsManagedLedgerOffloadRegion=europe-west3
身份验证 (必选)
为了使 broker 访问GCS,你需要在配置文件broker.conf
中配置gcsManagedLedgerOffloadServiceAccountKeyFile
。
gcsManagedLedgerOffloadServiceAccountKeyFile
是一个JSON文件,它包含一个服务账户的GCS凭证。
示例
要生成服务帐户凭据或查看你已经生成的公共凭据,请遵循以下步骤:
打开 服务账户页面。
选择一个项目或创建一个新项目。
Click Create service account.
在 Create service account 窗口中,输入服务账户的名称并选择 Furnish a new private key。
如果你想给服务账号 授予 G Suire domain-wide 权限 ,选择 Enable G Suite Domain-wide Delegation。
Click Create.
Note
确保你创建的服务账号拥有操作 GCS 的权限,你需要在 这里给你的服务账号指定Storage Admin 权限。
你可以获得以下信息,并在
broker.conf
中设置。gcsManagedLedgerOffloadServiceAccountKeyFile="/Users/user-name/Downloads/project-804d5e6a6f33.json"
提示
读取/写入的数据块大小
你可以在配置文件 broker.conf
中配置发送到 GCS 或从 GCS 读取的请求大小。
配置|描述 |—-|—- gcsManagedLedgerOffloadReadBufferSizeInBytes
| 当从GCS读回数据时,每个数据块大小。
默认值是1 MB。 gcsManagedLedgerOffloadMaxBlockSizeInBytes
|在向GCS上传多部分时,”部分 “的最大尺寸。
它不能小于5MB。
默认值为64MB。
配置 GCS offloader 自动运行
命名空间策略可以配置成一旦到达阈值就自动卸载数据。 该阈值基于一个 topic 在 Pulsar 集群的数据存储大小而定。 一旦 topic 到达阈值,就自动触发卸载操作。
阈值|动作 |—-|—-
0 | 如果 topic 存储达到其阈值,它就会触发 offloading 操作。 = 0| 它使 broker 竭尽全力地 offload 数据。 < 0 | 它将禁用自动 offloading 操作。
当一个新 segment 添加到 topic 日志后会自动运行卸载。 如果你在命名空间上设置了阈值,但向该 topic 生产的消息很少,offloader 将会停止工作,直至当前 segment 达到饱和。
你可以通过命令行工具(CLI)设置阈值大小,比如 pulsar-admin。
broker.conf
和 standalone.conf
中的卸载配置文件,主要适用于没有命名空间级别卸载策略的命名空间中。 每个命名空间可以有自己的卸载策略。 如果您想为每个命名空间设置卸载策略,请使用命令 pulsar-admin namespaces set-offload-policies options 。
示例
该示例使用 pulsar-admin 将 GCS offloader 的阈值大小设置为10MB。
pulsar-admin namespaces set-offload-threshold --size 10M my-tenant/my-namespace
提示
关于
pulsar-admin namespaces set-offload-threshold options
命令的更多信息,包括标志、描述、默认值和速记方法,见这里。
配置 GCS offloader 手动运行
对于每一个 topic,你可以使用下列方法来手动触发 GCS offloader:
使用 REST endpoint。
使用命令行工具(例如 pulsar-admin)。
要想用命令行工具触发 GCS,你需要指定一个 Topic 应该保留在 Pulsar 集群中的最大数据量(阈值)。 如果 Pulsar 集群上 topic 的数据大小超过了这个阈值,那么该 topic 下的 segment 将会被陆续被卸载到 GCS 上,直到不再超过这个阈值。 优先移动旧的 segment。
示例
此示例使用 pulsar-admin 命令
pulsar-admin topics offload (topic-name) (threshold)
手动触发了 GCS offloader 运行。pulsar-admin topics offload persistent://my-tenant/my-namespace/topic1 10M
输出
Offload triggered for persistent://my-tenant/my-namespace/topic1 for messages before 2:0:-1
提示
关于
pulsar-admin topics offload-status options
命令的更多信息,包括标志、描述、默认值和速记方法,见这里。这个例子使用 pulsar-admin 检查 GCS offloader 的状态,命令是
pulsar-admin topics offload-status options
。pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
输出
Offload is currently running
要等待 GCS 完成任务,请添加
-w
参数。pulsar-admin topics offload-status -w persistent://my-tenant/my-namespace/topic1
输出
Offload was a success
如果卸载时出现错误,错误会返回到
pulsar-admin topics offload-status
命令。pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
输出
Error in offload
null
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=
提示
关于
pulsar-admin topics offload-status options
命令的更多信息,包括标志、描述、默认值和速记方法,见这里。
教程
有关如何在 Pulsar 中使用 GCS offloader 的完整和分解讲解,请参阅这里。