ListGCSBucket

文档中心 › 组件索引 › ListGCSBucket

ListGCSBucket Processor

类型全限定名:cn.org.acal.lynxus.processors.gcp.storage.ListGCSBucket

所属 Bundle:cn.org.acal.lynxus:lynxus-gcp-nar:2.11.8

描述

从 GCS 存储桶中检索对象列表。 对于列出的每个对象,创建一个表示该对象的 FlowFile,以便可以与 FetchGCSObject 结合获取它。 该处理器设计为仅在集群中的主节点上运行。 如果主节点发生变化,新的主节点将继续前一个节点停止的位置,而不会复制所有数据。

标签

google cloudgooglestoragegcslist

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
GCP Credentials Provider Service控制器服务 API:
GCPCredentialsService
cn.org.acal.lynxus-lynxus-gcp-services-api-nar-2.11.8
用于获取 Google Cloud Platform 凭据的Controller Service。
Project ID谷歌云项目 ID
支持表达式语言:是(仅使用环境/系统变量求值)
Bucket对象的存储桶。
支持表达式语言:是(仅使用环境/系统变量求值)
Prefix用于过滤对象列表的前缀。 在大多数情况下,它应该以正斜杠(“/”)结尾。
支持表达式语言:是(仅使用环境/系统变量求值)
Listing Strategytimestamps
  • 跟踪时间戳 — 此策略跟踪已列取实体的最新时间戳以确定新/更新的实体。由于它只跟踪少量时间戳,因此可以高效管理列取状态。如果新添加或修改的实体的时间戳早于跟踪的最新时间戳,则此策略不会拾取它们。在列取运行时同时写入多个子目录时也可能遗漏文件。
  • 跟踪实体 — 此策略跟踪最新 '实体跟踪时间窗口' 内所有已列取实体的信息以确定新/更新的实体。此策略可以拾取具有旧时间戳的实体,这些实体可能在 '跟踪时间戳' 策略中被遗漏。即使在列取运行时同时写入多个子目录时也能正常工作。但是需要额外的 DistributedMapCache 控制器服务,并且使用更多的 JVM 堆内存。有关 '实体跟踪时间窗口' 属性工作方式的更多信息,请参阅其描述。
  • 不跟踪 — 此策略在没有任何跟踪的情况下列取所有实体。每次调度此处理器时都会列取相同的实体。建议更改默认的运行计划值。与持久化状态相关的任何属性都将被忽略。
指定如何确定新的/更新的实体。 有关详细信息,请参阅每个策略的说明。
Entity Tracking State Cache控制器服务 API:
DistributedMapCacheClient
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
已列出的实体存储在指定的缓存中, 以便该处理器能够在 Lynxus 重启或主节点变更后恢复列举。 'Tracking Entities' 策略需要跟踪最近 'Tracking Time Window' 内所有已列出实体的信息。 为支持大量实体,该策略使用 DistributedMapCache 而非托管状态。 缓存键格式为 'ListedEntities::{processorId}(::{nodeId})'。 如果按节点跟踪已列出的实体,则会添加可选的 '::{nodeId}' 部分以分别管理状态。 例如,集群范围缓存键 = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', 单节点缓存键 = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::lynxus-node3'。 存储的缓存内容是经过 Gzip 压缩的 JSON 字符串。 当目标列举配置发生变化时,缓存键将被删除。 由 'Tracking Entities' 策略使用。
Entity Tracking Initial Listing Targetall
  • 跟踪时间窗口 — 在首次列取活动中忽略时间戳早于指定 '跟踪时间窗口' 的实体。
  • 所有可用 — 不考虑实体时间戳,在首次列取活动中将列取所有现有实体。
指定应如何处理初始列举。 由 'Tracking Entities' 策略使用。
Entity Tracking Time Window3 hours指定该处理器应跟踪已列出实体的时长。 'Tracking Entities' 策略可以选取时间戳位于指定时间窗口内的任何实体。 例如,若设为 '30 minutes',则该处理器运行时,最近 30 分钟内带有时间戳的任何实体都将成为列举目标。 当满足以下任一条件时,已列出的实体被视为 'new/updated' 并发出一个 FlowFile: 1. 不存在于已列出的实体中, 2. 时间戳比缓存的实体更新, 3. 大小与缓存的实体不同。 如果某个缓存实体的时间戳早于指定的时间窗口,该实体将从缓存的已列出实体中移除。 由 'Tracking Entities' 策略使用。
支持表达式语言:是(仅使用环境/系统变量求值)
Record Writer控制器服务 API:
RecordSetWriterFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于创建列表的记录写入器。如果未指定,将为每个列出的实体创建一个 FlowFile。如果指定了记录写入器,所有实体将写入单个 FlowFile,而不是将属性添加到各个 FlowFile。
Use Generationsfalse
  • true
  • false
指定是否使用 GCS 代(如适用)。如果为 false,则仅返回每个对象的最新版本。
Number of Retries6在路由到失败关系之前应进行多少次重试。
存储 API URL覆盖默认存储 URL。配置替代的存储 API URL 同时也会覆盖请求中的HTTP Host 头,如 Google 文档中关于私有服务连接的说明所述。
支持表达式语言:是(仅使用环境/系统变量求值)
Proxy Configuration Service控制器服务 API:
ProxyConfigurationService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定代理配置 Controller Service 来代理网络请求。

关系 (Relationships)

名称描述自动终止
success成功执行 Google Cloud Storage 操作后,FlowFiles 将路由到此关系。否

写入的 FlowFile 属性

名称描述
filename文件名
gcs.bucket对象的存储桶。
gcs.key对象的名称。
gcs.size对象的大小。
gcs.cache.control对象的数据缓存控制。
gcs.component.count组成对象的组件数量。
gcs.content.disposition对象的数据内容处置。
gcs.content.encoding对象的内容编码。
gcs.content.language对象的内容语言。
mime.type对象的 MIME/Content-Type
gcs.crc32c对象数据的 CRC32C 校验和,以 base64 大端序编码。
gcs.create.time对象的创建时间(毫秒)
gcs.update.time对象的最后修改时间(毫秒)
gcs.encryption.algorithm用于加密对象的算法。
gcs.encryption.sha256用于加密对象的密钥的 SHA256 哈希值
gcs.etag对象的 HTTP 1.1 实体标签。
gcs.generated.id服务为对象生成的标识
gcs.generation对象的数据代。
gcs.md5对象数据的 MD5 哈希值,以 base64 编码。
gcs.media.link对象的媒体下载链接。
gcs.metageneration对象的元代。
gcs.owner对象的所有者(上传者)。
gcs.owner.type对象上传者的 ACL 实体类型。
gcs.acl.owner具有对象所有者访问权限的 ACL 实体列表,以逗号分隔。实体可以是电子邮件地址、域名或项目 ID。
gcs.acl.writer具有对象写入访问权限的 ACL 实体列表,以逗号分隔。实体可以是电子邮件地址、域名或项目 ID。
gcs.acl.reader具有对象读取访问权限的 ACL 实体列表,以逗号分隔。实体可以是电子邮件地址、域名或项目 ID。
gcs.uri对象的 URI 字符串。

状态管理

作用域描述
CLUSTER执行键列表后,存储最新键的时间戳以及共享相同时间戳的键。这允许处理器在下次运行时仅列出在此日期之后添加或修改的键。状态跨集群存储,以便此处理器可以仅在主节点上运行,如果选择了新的主节点,新节点可以从上一个节点停止的地方继续,而不会重复数据。

受限 (Restricted)

该组件不受限。

输入要求

该组件不允许有传入连接。

详细说明

ListGCSBucket

流式处理与批处理

ListGCSBucket 会对所配置 GCS 桶中遇到的所有 GCS 对象执行列表(listing) 操作。常见的用例大致分为两类。

流式用例

默认情况下,该 Processor 会为桶中的每个对象创建一个独立的 FlowFile,并添加 filename、bucket 等 Attribute。一个常见用法是把 ListGCSBucket 连接到 FetchGCSObject Processor。这两个 Processor 配合使用,可以方便地监视桶,并在任何新对象到达 GCS 时以高效的 流式方式获取其内容。

批处理用例

另一个常见用例是:希望处理给定桶中所有新到达的对象,并且只有当 所有对象都处理完成之后才执行某些操作。上述流式数据的处理方式使 这一点变得困难,因为 Lynxus 本质上是一个流式平台,不存在有明确 起点和终点的"作业",数据只是在可用时被拾取。

为解决这个问题,ListGCSBucket Processor 可以可选地配置 Record Writer。配置后,只会创建单个 FlowFile,其中为桶中的每个 对象包含一条记录,而不是每个对象一个 FlowFile。关于如何构建 "先处理完所有对象再进入下一步"的数据流,可参考 ListFile 的文档示例。

不过,ListFile 与 ListGCSBucket 产生的数据有一个重要区别:两者 输出的记录结构不同。ListGCSBucket 输出的记录遵循以下 schema (Avro 格式):

{
  "type": "record",
  "name": "lynxusRecord",
  "namespace": "cn.org.acal.lynxus",
  "fields": [
    {
      "name": "bucket",
      "type": "string"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "size",
      "type": [
        "null",
        "long"
      ]
    },
    {
      "name": "cacheControl",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "componentCount",
      "type": [
        "null",
        "int"
      ]
    },
    {
      "name": "contentDisposition",
      "type": [
        "null",
        "long"
      ]
    },
    {
      "name": "contentEncoding",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "contentLanguage",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "crc32c",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "createTime",
      "type": [
        "null",
        {
          "type": "long",
          "logicalType": "timestamp-millis"
        }
      ]
    },
    {
      "name": "updateTime",
      "type": [
        "null",
        {
          "type": "long",
          "logicalType": "timestamp-millis"
        }
      ]
    },
    {
      "name": "encryptionAlgorithm",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "encryptionKeySha256",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "etag",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "generatedId",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "generation",
      "type": [
        "null",
        "long"
      ]
    },
    {
      "name": "md5",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "mediaLink",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "metageneration",
      "type": [
        "null",
        "long"
      ]
    },
    {
      "name": "owner",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "ownerType",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "uri",
      "type": [
        "null",
        "string"
      ]
    }
  ]
}