

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Pip EventBridge es 批处理和并发
<a name="eb-pipes-batching-concurrency"></a>

## 批处理行为
<a name="pipes-batching"></a>

EventBridge Pipes 支持从源和支持它的目标进行批处理。此外，还支持对 AWS Lambda 和 AWS Step Functions进行批量扩充。由于不同的服务支持不同程度的批处理，因此不能为管道配置比目标支持的大小更大的批处理。例如，Amazon Kinesis 流源支持的批次大小上限为 10,000 条记录，但 Amazon Simple Queue Service 支持将每批最多 10 条消息作为目标。因此，从 Kinesis 流到 Amazon SQS 队列的管道，在源上配置的批次大小上限可以为 10。

如果您使用不支持批处理的富集或目标配置管道，则无法在源上激活批处理。

在源上激活批处理时，JSON 记录数组将通过管道传递，然后映射到支持的富集或目标中的批处理 API。[输入转换器](eb-pipes-input-transformation.md)分别应用于数组中的每个 JSON 记录，而不是整个数组。有关这些数组的示例，请参阅 [Amazon Pi EventBridge pes 来源](eb-pipes-event-source.md)并选择特定源。即使批次大小为 1，Pipes 也会将批处理 API 用于支持的富集或目标。如果富集或目标没有批处理 API，但收到完整的 JSON 负载，例如 Lambda 和 Step Functions，则整个 JSON 数组将在一个请求中发送。即使批次大小为 1，请求也将作为 JSON 数组发送。

如果在源位置将某管道配置为进行批处理，并且目标也支持批处理，则可以从富集中返回 JSON 项目的数组。该数组可以包含比原始源更短或更长的数组。但是，如果该数组大于目标支持的批次大小，管道将不会调用目标。

### 支持的可批处理目标
<a name="pipes-batchable-target"></a>


| Target | 最大批次大小 | 
| --- | --- | 
| CloudWatch 日志 | 10000 | 
| EventBridge 活动巴士 | 10 | 
| Firehose 流 | 500 | 
| Kinesis 流 | 500 | 
| Lambda 函数 | 客户定义 | 
| Step Functions 状态机 | 客户定义 | 
| 亚马逊 SNS 主题 | 10 | 
| Amazon SQS 队列 | 10 | 

以下富集和目标将接收完整的批处理事件负载进行处理，并受限于事件总负载大小、而不是批次大小：
+ Step Functions 状态机（262144 个字符）
+ Lambda 函数 (6MB)

### 部分批处理故障
<a name="pipes-partial-batch-failure"></a>

对于 Amazon SQS 和流源，例如 Kinesis 和 DynamoDB，Pipes 支持对目标故障进行部分 EventBridge 批量故障处理。如果目标支持批处理并且只有部分批处理成功，则 EventBridge 会自动重试对剩余的有效负载进行批处理。对于内容最 up-to-date丰富的内容，此重试贯穿整个管道，包括重新调用任何已配置的扩充功能。

不支持对富集进行部分批处理故障处理。

对于 Lambda 和 Step Functions 目标，您还可以从目标返回具有已定义结构的负载，来指定部分故障。这表示需要重试的事件。

**部分故障负载结构的示例**

```
{ 
  "batchItemFailures": [ 
    {
      "itemIdentifier": "id2"
    },
    {
      "itemIdentifier": "id4"
    }
]
```

在此示例中，`itemIdentifier` 与您的目标所处理事件的原始源 ID 相匹配。对于 Amazon SQS，此 ID 为 `messageId`。对于 Kinesis 和 DynamoDB，此 ID 为 `eventID`。为了 EventBridge 使 Pipes 能够充分处理来自目标的部分批处理故障，这些字段需要包含在扩充返回的任何数组有效载荷中。

## 吞吐量和并发行为
<a name="pipes-concurrency"></a>

管道接收并传递到富集或目标的每个事件或事件批次，都被视为管道*执行*。处于 `STARTED` 状态的管道会持续轮询来自源的事件，并根据可用的积压和配置的批处理设置向上和向下扩展。

有关并发管道执行的配额，以及每个账户和区域的管道数量，请参阅 [EventBridge 管道配额](eb-quota.md#eb-pipes-limits)。

默认情况下，单个管道可扩展到以下最大并发执行数，具体取决于来源：
+ **DynamoDB** - 并发执行最多为管道中配置的 `ParallelizationFactor` 乘以流中的分片数。
+ **Apache Kafka** - 并发执行最多为主题的分区数量，最高可达 1000 个。
+ **Kinesis** — 并发执行可以攀升到管道上`ParallelizationFactor`配置的高度乘以流中的分片数。
+ **Amazon MQ** - 5
+ **Amazon SQS** - 1250

如果您需要更高的最大轮询吞吐量或并发限制，[请联系支持人员](https://console.aws.amazon.com/support/home?#/case/create?issueType=technical)。

**注意**  
执行限制被视为尽力执行的安全限制。尽管轮询不会被限制在这些值以下，但管道或账户的突增值可能会高于这些建议值。

管道执行时间限制为最长 5 分钟，包括富集和目标处理。此限制目前无法提高。

具有严格排序的来源（例如 Amazon SQS FIFO 队列、Kinesis 和 DynamoDB Streams 或 Apache Kafka 主题）的管道在并发性方面受到来源配置的进一步限制，例如FIFO队列的消息组数量或Kinesis队列的分 IDs 片数量。由于在这些约束条件下严格保证排序，因此具有有序源的管道不能超过这些并发限制。