

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

# 使用 Kinesis Data Streams API 和 适用于 PHP 的 Amazon SDK 版本 3 来管理数据分片
<a name="kinesis-example-shard"></a>

Amazon Kinesis Data Streams 允许向端点发送实时数据。数据流的速率取决于流中的分片数。

您可以每秒向单个分片写入 1000 条记录。每个分片的上传限制为每秒 1 MiB。用量按每个分片计算和收费，因此，请使用这些示例来管理流的数据容量和成本。

以下示例演示如何：
+ 使用 [ListShards](https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#listshards) 列出流中的分片。
+ 使用 [UpdateShardCount](https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#updateshardcount) 增加或减少流中的分片数。

适用于 PHP 的 Amazon SDKGitHub[ 上提供了](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)的所有示例代码。

## 凭证
<a name="examplecredentials"></a>

运行示例代码之前，请配置您的 Amazon 凭证，如 [Amazon 使用 适用于 PHP 的 Amazon SDK 版本 3 进行身份验证](credentials.md) 中所述。然后导入 适用于 PHP 的 Amazon SDK，如 [安装 适用于 PHP 的 Amazon SDK 版本 3](getting-started_installation.md) 中所述。

有关使用 Amazon Kinesis Data Streams 的更多信息，请参阅 [Amazon Kinesis Data Streams 开发人员指南](https://docs.amazonaws.cn/streams/latest/dev/)。

## 列出数据流分片
<a name="list-data-stream-shards"></a>

列出特定流中最多 100 个分片的详细信息。

要列出 Kinesis 数据流中的分片，请使用 [ListShards](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_ListShards.html) 操作。

 **导入**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **示例代码** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

$name = "my_stream_name";

try {
    $result = $kinesisClient->ListShards([
        'StreamName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 添加更多数据流分片
<a name="add-more-data-stream-shards"></a>

如果您需要更多数据流分片，则可增加当前分片数。我们建议您在增加时使分片计数加倍。这将生成当前可用的每个分片的副本以增加容量。在一个 24 小时的期间内，您只能将分片数加倍两次。

请记住，Kinesis Data Streams 用量的费用是按分片计算的，因此当需求减少时，我们建议将分片数量减半。删除分片时，只能将分片数量减少到当前分片计数的一半。

要更新 Kinesis 数据流的分片数，请使用 [UpdateShardCount](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_UpdateShardCount.html) 操作。

 **导入**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **示例代码** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

$name = "my_stream_name";
$totalshards = 4;

try {
    $result = $kinesisClient->UpdateShardCount([
        'ScalingType' => 'UNIFORM_SCALING',
        'StreamName' => $name,
        'TargetShardCount' => $totalshards
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```