Use filesystem offloader with Pulsar

本章将一步一步的指导你完成在 Pulsar 中安装和配置filesystem offloader。

安装

请按照以下步骤安装 filesystem offloader。

前提条件

  • Pulsar:2.4.2 或更高版本

  • Hadoop: 3.x.x

步骤

下列示例将使用 Pulsar 2.5.1。

  1. 使用下列方式下载 Pulsar 压缩包:

    • Apache 镜像下载

    • 从 Pulsar 官网 下载页 下载

    • 使用 wget 命令下载:

      1. wget https://archive.apache.org/dist/pulsar/pulsar-2.5.1/apache-pulsar-2.5.1-bin.tar.gz
  2. 下载并解压 Pulsar offloaders 程序包。

    1. wget https://downloads.apache.org/pulsar/pulsar-2.5.1/apache-pulsar-offloaders-2.5.1-bin.tar.gz
    2. 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.

  3. 将 Pulsar offloaders 作为offloaders复制到Pulsar目录中。

    1. mv apache-pulsar-offloaders-2.5.1/offloaders apache-pulsar-2.5.1/offloaders
    2. ls offloaders

    输出

    1. tiered-storage-file-system-2.5.1.nar
    2. tiered-storage-jcloud-2.5.1.nar

    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.

Configuration

Note

在将数据从 BookKeeper 卸载到 filesystem 之前,你需要配置 filesystem offloader 驱动程序的一些属性。

此外,你还可以配置 filesystem offloader 的自动触发和手动触发机制。

配置 filesystem offloader driver

你可以在配置文件 broker.confstandalone.conf 中配置f ilesystem offloader driver。

  • 以下为必选 配置。

    所需配置 | 说明 | 示例值 |—-|—-|—- managedLedgerOffloadDriver | Offloader driver 名称,不区分大小写。 | filesystem fileSystemURI | Connection address | hdfs://127.0.0.1:9000 fileSystemProfilePath | Hadoop profile path | ../conf/filesystem_offload_core_site.xml

  • 以下为可选 配置。

    可选配置 | 描述 | 示例值 |—-|—-|—- <code>managedLedgerMinLedgerRolloverTimeMinutes | 一个 Topic 的 Ledger 翻转之间的最小时间

    注意: 不建议你在生产环境中设置此配置。|2 managedLedgerMaxEntriesPerLedger | 在触发翻转之前追加到 Topic ledger 的最大条目数。

    注意:不建议你在生产环境中设置此配置。|5000

Offloader driver (必填)

Offloader driver 名称,不区分大小写

下面的例子将 offloader driver 的名称设置为 filesystem

  1. managedLedgerOffloadDriver=filesystem

连接地址 (必填)

连接地址是访问默认 Hadoop 分布式文件系统的 URI。

示例

这个例子将连接地址设置为 hdfs:/127.0.0.1:9000

  1. fileSystemURI=hdfs://127.0.0.1:9000

Hadoop配置文件路径 (必填)

The configuration file is stored in the Hadoop profile path. 它包含了一些 Hadoop 性能调整的配置。

示例

本例将 Hadoop 配置文件路径设置为./conf/filesystem_offload_core_site.xml

  1. fileSystemProfilePath=../conf/filesystem_offload_core_site.xml

你可以在 filesystem_offload_core_site.xml 文件中设置以下配置。

  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value></value>
  4. </property>
  5. <property>
  6. <name>hadoop.tmp.dir</name>
  7. <value>pulsar</value>
  8. </property>
  9. <property>
  10. <name>io.file.buffer.size</name>
  11. <value>4096</value>
  12. </property>
  13. <property>
  14. <name>io.seqfile.compress.blocksize</name>
  15. <value>1000000</value>
  16. </property>
  17. <property>
  18. <name>io.seqfile.compression.type</name>
  19. <value>BLOCK</value>
  20. </property>
  21. <property>
  22. <name>io.map.index.interval</name>
  23. <value>128</value>
  24. </property>

提示

有关 Hadoop HDFS 的更多信息,请参阅这里

配置 filesystem offloader 自动运行

命名空间策略可以配置成一旦到达阈值就自动卸载数据。 该阈值基于一个 topic 在 Pulsar 集群的数据存储大小而定。 一旦 topic 到达阈值,就自动触发卸载操作。

阈值|动作 |—-|—-

0 | 如果 topic 存储达到其阈值,它就会触发 offloading 操作。 = 0| 它使 broker 竭尽全力地 offload 数据。 < 0 | 它将禁用自动 offloading 操作。

Automatic offload runs when a new segment is added to a topic log. 如果你在命名空间上设置了阈值,但向该 topic 生产的消息很少,offloader 将会停止工作,直至当前 segment 达到饱和。

你可以通过命令行工具(CLI)设置阈值大小,比如 pulsar-admin。

示例

该示例使用pulsar-admin将 filesystem offloader 的阈值大小设置为10MB。

  1. pulsar-admin namespaces set-offload-threshold --size 10M my-tenant/my-namespace

提示

关于pulsar-admin topics offload-status options命令的更多信息,包括标志、描述、默认值和速记方法,见这里

配置 filesystem offloader 手动运行

对于每一个 topic,你可以使用下列方法来手动触发 filesystem offloader:

  • 使用 REST endpoint。

  • 使用命令行工具(例如 pulsar-admin)。

要想用命令行工具触发,你要指定一个主题应该保留在 Pulsar 集群中的最大数据量 (阈值)。 如果 Pulsar 集群上 topic 的数据大小超过了这个阈值,那么该 topic 下的 segment 就会被陆续卸载到 filesystem 上,直到不再超过这个阈值。 优先卸载旧的 segment。

示例

  • 该示例使用 pulsar-admin 手动触发了 filesystem offloader 的运行。

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

    输出

    1. Offload triggered for persistent://my-tenant/my-namespace/topic1 for messages before 2:0:-1

    提示

    关于pulsar-admin topics offload-status options命令的更多信息,包括标志、描述、默认值和速记方法,见这里

  • 该示例使用 pulsar-admin 检查 filesystem offloader 的状态。

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

    输出

    1. Offload is currently running

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

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

    输出

    1. Offload was a success

    如果在卸载操作中出现错误,该错误会将会在 pulsar-admin topics offload-status 命令中抛出。

    1. 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. > 关于`pulsar-admin topics offload-status options`命令的更多信息,包括标志、描述、默认值和速记方法,见[这里](reference-pulsar-admin.md#offload-status)。

教程

有关如何在 Pulsar 中使用 filesystem offloader 的完整和分解讲解,请参阅这里。 ```