ListGCSBucket Processor
描述
从 GCS 存储桶中检索对象列表。 对于列出的每个对象,创建一个表示该对象的 FlowFile,以便可以与 FetchGCSObject 结合获取它。 该处理器设计为仅在集群中的主节点上运行。 如果主节点发生变化,新的主节点将继续前一个节点停止的位置,而不会复制所有数据。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| GCP Credentials Provider Service | | 控制器服务 API:GCPCredentialsServicecn.org.acal.lynxus-lynxus-gcp-services-api-nar-2.11.8 | 用于获取 Google Cloud Platform 凭据的Controller Service。 |
| Project ID | | 谷歌云项目 ID 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Bucket | | 对象的存储桶。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Prefix | | 用于过滤对象列表的前缀。 在大多数情况下,它应该以正斜杠(“/”)结尾。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Listing Strategy | timestamps |
| 指定如何确定新的/更新的实体。 有关详细信息,请参阅每个策略的说明。 |
| Entity Tracking State Cache | | 控制器服务 API:DistributedMapCacheClientcn.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 Target | all |
| 指定应如何处理初始列举。 由 'Tracking Entities' 策略使用。 |
| Entity Tracking Time Window | 3 hours | 指定该处理器应跟踪已列出实体的时长。 'Tracking Entities' 策略可以选取时间戳位于指定时间窗口内的任何实体。 例如,若设为 '30 minutes',则该处理器运行时,最近 30 分钟内带有时间戳的任何实体都将成为列举目标。 当满足以下任一条件时,已列出的实体被视为 'new/updated' 并发出一个 FlowFile: 1. 不存在于已列出的实体中, 2. 时间戳比缓存的实体更新, 3. 大小与缓存的实体不同。 如果某个缓存实体的时间戳早于指定的时间窗口,该实体将从缓存的已列出实体中移除。 由 'Tracking Entities' 策略使用。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Record Writer | | 控制器服务 API:RecordSetWriterFactorycn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 指定用于创建列表的记录写入器。如果未指定,将为每个列出的实体创建一个 FlowFile。如果指定了记录写入器,所有实体将写入单个 FlowFile,而不是将属性添加到各个 FlowFile。 |
| Use Generations | false |
| 指定是否使用 GCS 代(如适用)。如果为 false,则仅返回每个对象的最新版本。 |
| Number of Retries | 6 | 在路由到失败关系之前应进行多少次重试。 | |
| 存储 API URL | | 覆盖默认存储 URL。配置替代的存储 API URL 同时也会覆盖请求中的HTTP Host 头,如 Google 文档中关于私有服务连接的说明所述。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Proxy Configuration Service | | 控制器服务 API:ProxyConfigurationServicecn.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"
]
}
]
}