ListS3 Processor
描述
从 S3 存储桶中检索对象列表。 对于列出的每个对象,创建一个表示该对象的 FlowFile,以便可以与 FetchS3Object 结合获取它。 该处理器设计为仅在集群中的主节点上运行。 如果主节点发生变化,新的主节点将继续前一个节点停止的位置,而不会复制所有数据。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Bucket | | 与之交互的 S3 存储桶 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Region | us-west-2 |
| 服务所在的 AWS 区域 |
| Custom Region | | 自定义区域,例如 AWS 兼容服务提供商的区域 支持表达式语言:是(仅使用环境/系统变量求值) | |
| AWS Credentials Provider Service | | 控制器服务 API:AwsCredentialsProviderServicecn.org.acal.lynxus-lynxus-aws-service-api-nar-2.11.8 | 用于获取AWS凭证提供者的Controller Service |
| 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 Time Window | 3 hours | 指定该处理器应跟踪已列出实体的时长。 'Tracking Entities' 策略可以选取时间戳位于指定时间窗口内的任何实体。 例如,若设为 '30 minutes',则该处理器运行时,最近 30 分钟内带有时间戳的任何实体都将成为列举目标。 当满足以下任一条件时,已列出的实体被视为 'new/updated' 并发出一个 FlowFile: 1. 不存在于已列出的实体中, 2. 时间戳比缓存的实体更新, 3. 大小与缓存的实体不同。 如果某个缓存实体的时间戳早于指定的时间窗口,该实体将从缓存的已列出实体中移除。 由 'Tracking Entities' 策略使用。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Entity Tracking Initial Listing Target | all |
| 指定应如何处理初始列举。 由 'Tracking Entities' 策略使用。 |
| Record Writer | | 控制器服务 API:RecordSetWriterFactorycn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 指定用于创建列表的记录写入器。如果未指定,将为每个列出的实体创建一个 FlowFile。如果指定了记录写入器,所有实体将写入单个 FlowFile,而不是将属性添加到各个 FlowFile。 |
| Minimum Object Age | 0 sec | S3 对象必须达到的最低年龄才能被考虑; 任何早于该时间(根据上次修改日期)的对象都将被忽略 | |
| Maximum Object Age | | S3 对象可以被考虑的最大年龄; 任何早于该时间(根据上次修改日期)的对象都将被忽略 | |
| Listing Batch Size | 100 | 如果不使用记录写入器,此属性决定单个批次中应列出多少 S3 对象。一旦达到此数量,已创建的 FlowFile 将被传出处理器。将此值设置得更低可能会通过在完成完整列表之前发送 FlowFile 来降低延迟。但是,它可能会显著降低性能。较大的值可能在发送 FlowFile 之前需要更多内存来存储所有信息。如果使用记录写入器,则忽略此属性,因为记录写入器的主要优点之一是能够将整个列表作为单个 FlowFile 发出。 | |
| Write Object Tags | false |
| 如果设置为“True”,与 S3 对象关联的标签将被写入 FlowFile 属性 |
| Write User Metadata | false |
| 如果设置为“True”,与 S3 对象关联的用户定义的元数据将添加到 FlowFile 属性/记录中 |
| Communications Timeout | 30 secs | ||
| SSL Context Service | | 控制器服务 API:SSLContextProvidercn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 指定可选的 SSL 上下文服务,如果提供,将用于创建连接 |
| Endpoint Override URL | | 用于替代 AWS 默认端点的端点 URL,包括协议、主机、端口和路径。AWS 库根据 AWS 区域选择端点 URL,但此属性会覆盖所选端点 URL,允许与其他 S3 兼容端点一起使用。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Proxy Configuration Service | | 控制器服务 API:ProxyConfigurationServicecn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 指定代理配置 Controller Service 来代理网络请求。 |
| Delimiter | | 用于分隔存储桶内目录的字符串。请参阅 AWS 文档以了解此字段的正确用法。 | |
| Prefix | | 用于过滤对象列表的前缀。 不要以正斜杠“/”开头。 在大多数情况下,它应该以正斜杠“/”结尾。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Use Versions | false |
| 指定是否使用 S3 版本(如适用)。如果为 false,则仅返回每个对象的最新版本。 |
| List Type | 1 |
| 指定是使用原始列表对象还是较新的列表对象版本 2 端点。 |
| Requester Pays | false |
| 如果为 true,表示请求者同意支付与列出 S3 存储桶相关的任何费用。这将把 'x-amz-request-payer' 头设置为 'requester'。请注意,当「使用版本」为 'true' 时,此设置不适用。 |
关系 (Relationships)
| 名称 | 描述 | 自动终止 |
|---|---|---|
success | FlowFiles被路由到成功关系 | 否 |
写入的 FlowFile 属性
| 名称 | 描述 |
|---|---|
s3.bucket | S3 存储桶的名称 |
s3.region | S3存储桶的区域 |
filename | 文件名 |
s3.etag | 可用于查看文件是否发生更改的 ETag |
s3.isLatest | 一个布尔值,指示这是否是该对象的最新版本 |
s3.lastModified | 自 UTC 时间纪元以来的最后修改时间(以毫秒为单位) |
s3.length | 对象的大小(以字节为单位) |
s3.storeClass | 对象的存储类别 |
s3.version | 对象的版本(如果适用) |
s3.tag.___ | 如果'写入对象标签'设置为'True',与正在列出的 S3 对象关联的标签将作为 FlowFile 属性的一部分写入 |
s3.user.metadata.___ | 如果'写入用户元数据'设置为'True',与正在列出的 S3 对象关联的用户定义元数据将 |
状态管理
| 作用域 | 描述 |
|---|---|
| CLUSTER | 执行键列表后,存储最新键的时间戳以及共享相同时间戳的键。这允许处理器在下次运行时仅列出在此日期之后添加或修改的键。状态跨集群存储,以便此处理器可以仅在主节点上运行,如果选择了新的主节点,新节点可以从上一个节点停止的地方继续,而不会重复数据。 |
受限 (Restricted)
该组件不受限。
输入要求
该组件不允许有传入连接。
另请参阅
详细说明
ListS3
流式处理与批处理
ListS3 会对所配置 S3 桶中遇到的所有 S3 对象执行列表(listing)操作。 常见的用例大致分为两类。
流式用例
默认情况下,该 Processor 会为桶中的每个对象创建一个独立的 FlowFile,并添加 filename、bucket 等 Attribute。一个常见用法是把 ListS3 连接到 FetchS3 Processor。这两个 Processor 配合使用,可以 方便地监视桶,并在任何新对象到达 S3 时以高效的流式方式获取其内容。
批处理用例
另一个常见用例是:希望处理给定桶中所有新到达的对象,并且只有当所有 对象都处理完成之后才执行某些操作。上述流式数据的处理方式使这一点 变得困难,因为 Lynxus 本质上是一个流式平台,不存在有明确起点和终点 的"作业",数据只是在可用时被拾取。
为解决这个问题,ListS3 Processor 可以可选地配置 Record Writer。 配置后,只会创建单个 FlowFile,其中为桶中的每个对象包含一条记录, 而不是每个对象一个 FlowFile。关于如何构建"先处理完所有对象再进入 下一步"的数据流,可参考 ListFile 的文档示例。
不过,ListFile 与 ListS3 产生的数据有一个重要区别:两者输出的记录 结构不同。ListS3 输出的记录遵循以下 schema(Avro 格式):
{
"type": "record",
"name": "lynxusRecord",
"namespace": "cn.org.acal.lynxus",
"fields": [
{
"name": "key",
"type": "string"
},
{
"name": "bucket",
"type": "string"
},
{
"name": "owner",
"type": [
"null",
"string"
]
},
{
"name": "etag",
"type": "string"
},
{
"name": "lastModified",
"type": {
"type": "long",
"logicalType": "timestamp-millis"
}
},
{
"name": "size",
"type": "long"
},
{
"name": "storageClass",
"type": "string"
},
{
"name": "latest",
"type": "boolean"
},
{
"name": "versionId",
"type": [
"null",
"string"
]
},
{
"name": "tags",
"type": [
"null",
{
"type": "map",
"values": "string"
}
]
},
{
"name": "userMetadata",
"type": [
"null",
{
"type": "map",
"values": "string"
}
]
}
]
}