

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 列出碎片
<a name="kinesis-using-sdk-java-list-shards"></a>

資料串流可以有一個或多個碎片。從資料串流中列出或擷取碎片的建議方法是使用 [ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html) API。下列範例顯示取得資料串流中碎片清單的方法。如需此範例主要操作的完成說明以及所有您可以為該操作設定的參數，請參閱 [ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html)。

```
import software.amazon.awssdk.services.kinesis.KinesisAsyncClient;
import software.amazon.awssdk.services.kinesis.model.ListShardsRequest;
import software.amazon.awssdk.services.kinesis.model.ListShardsResponse;

import java.util.concurrent.TimeUnit;

public class ShardSample {

    public static void main(String[] args) {

        KinesisAsyncClient client = KinesisAsyncClient.builder().build();

        ListShardsRequest request = ListShardsRequest
                .builder().streamName("myFirstStream")
                .build();

        try {
            ListShardsResponse response = client.listShards(request).get(5000, TimeUnit.MILLISECONDS);
            System.out.println(response.toString());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
```

若要執行前一個程式碼範例，您可以使用如下所示的 POM 檔案。

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>kinesis.data.streams.samples</groupId>
    <artifactId>shards</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>kinesis</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>
</project>
```

透過 `ListShards` API，您可以使用 [ShardFilter](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ShardFilter.html) 參數來篩選掉 API 的回應。一次只可以指定一個篩選條件。

如果您在調用 ListShards API 時使用 `ShardFilter` 參數，`Type` 就是必要的屬性，而且必須指定。如果指定 `AT_TRIM_HORIZON`、`FROM_TRIM_HORIZON` 或 `AT_LATEST` 類型，則不需要指定 `ShardId` 或 `Timestamp` 選用屬性。

如果指定 `AFTER_SHARD_ID` 類型，則還必須提供選用 `ShardId` 屬性的值。該 `ShardId` 屬性在功能上與 ListShards API 的 `ExclusiveStartShardId` 參數相同。當指定 `ShardId` 屬性時，回應包括碎片，從其 ID 緊跟您所提供 `ShardId` 的碎片開始。

如果指定 `AT_TIMESTAMP` 或 `FROM_TIMESTAMP_ID` 類型，則還必須提供選用 `Timestamp` 屬性的值。如果指定 `AT_TIMESTAMP` 類型，則會傳回在提供的時間戳記開啟的所有碎片。如果指定 `FROM_TIMESTAMP` 類型，則會傳回在提供的時間戳記開啟的所有碎片。

**重要**  
`DescribeStreamSummary` 和 `ListShard` API 提供了一種更可擴展的方式來檢索有關資料串流的資訊。更具體地說，DescribeStream API 的配額可能會導致限流。如需詳細資訊，請參閱[配額和限制](service-sizes-and-limits.md)。另請注意，`DescribeStream`配額會跨與您 AWS 帳戶中所有資料串流互動的所有應用程式共用。另一方面，ListShards API 的配額是特定於單個資料串流。因此，您不僅可以使用 ListShards API 獲得更高的 TPS，而且隨著建立更多資料串流，操作可以更好地擴展。  
建議您移轉呼叫 DescribeStream API 的所有生產者和取用者，改為調用 DescribeStreamSummary 和 ListShard APIs API。若要識別這些生產者和取用者，建議使用 Athena 剖析 CloudTrail 記錄，因為在 API 呼叫中擷取了 KPL 和 KCL 的使用者客服人員。  

```
SELECT useridentity.sessioncontext.sessionissuer.username, 
useridentity.arn,eventname,useragent, count(*) FROM 
cloudtrail_logs WHERE Eventname IN ('DescribeStream')  AND 
eventtime
    BETWEEN ''
        AND ''
GROUP BY  useridentity.sessioncontext.sessionissuer.username,useridentity.arn,eventname,useragent
ORDER BY  count(*) DESC LIMIT 100
```
我們也建議重新設定 AWS Lambda 和 Amazon Firehose 與叫用 `DescribeStream` API 的 Kinesis Data Streams 整合，以便改為叫用 `DescribeStreamSummary`和 。 `ListShards`具體而言，對於 AWS Lambda，您必須更新事件來源映射。對於 Amazon Firehose，必須更新對應的 IAM 許可，以便其中包含 `ListShards` IAM 許可。