As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Listagem de estilhaços
Um fluxo de dados pode ter um ou mais estilhaços. Existem dois métodos para listar (ou recuperar) fragmentos de um fluxo de dados.
ListShardsAPI - Recomendado
O método recomendado para listar ou recuperar os fragmentos de um fluxo de dados é usar oListShardsAPI. O exemplo a seguir mostra como é possível obter uma lista de estilhaços em um stream de dados. Para obter uma descrição completa da operação principal usada neste exemplo e de todos os parâmetros que você pode definir para a operação, consulteListShards.
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()); } } }
Para executar o exemplo de código anterior, você pode usar um arquivo POM, como o seguinte.
<?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>
Com aListShards
API do, você pode usar oShardFilterparâmetro para filtrar a resposta da API. Você só pode especificar um filtro de cada vez.
Se você usar oShardFilter
parâmetro ao invocar oListShardsAPI, oType
É a propriedade necessária e deve ser especificada. Se você especificar oAT_TRIM_HORIZON
,FROM_TRIM_HORIZON
, ouAT_LATEST
Tipos, você não precisa especificar oShardId
ou oTimestamp
propriedades opcionais.
Se você especificar oAFTER_SHARD_ID
Tipo, você também deve fornecer o valor para o opcionalShardId
propriedade. OShardId
propriedade é idêntica em funcionalidade àExclusiveStartShardId
parâmetro doListShardsAPI. QuandoShardId
é especificada, a resposta inclui os fragmentos que começam com o fragmento cujo ID segue imediatamente oShardId
que você forneceu.
Se você especificar oAT_TIMESTAMP
ouFROM_TIMESTAMP_ID
Tipo, você também deve fornecer o valor para o opcionalTimestamp
propriedade. Se você especificar oAT_TIMESTAMP
type, então todos os fragmentos que estavam abertos no carimbo de data/hora fornecido são retornados. Se você especificar oFROM_TIMESTAMP
tipo, então todos os fragmentos a partir do carimbo de data/hora fornecido para TIP são retornados.
DescribeStreamSummary
eListShard
As APIs fornecem uma maneira mais escalável de recuperar informações sobre seus fluxos de dados. Mais especificamente, as cotas para oDescribeStreamA API pode causar limitação. Para obter mais informações, consulte Cotas e limites. Observe também queDescribeStream
As cotas são compartilhadas entre todos os aplicativos que interagem com todos os streamings de dados do seuAWSconta. As cotas para oListShardsA API, por outro lado, é específica para um único stream de dados. Portanto, você não só obtém TPS mais alto com oListShardsAPI, mas a ação é melhor à medida que você cria mais fluxos de dados.
Recomendamos que você migre todos os seus produtores e consumidores que chamam deDescribeStreamAPI para invocar oDescribeStreamResumo e oListShardAPIs. Para identificar esses produtores e consumidores, recomendamos usar o Athena para analisarCloudTraillogs como agentes de usuário para KPL e KCL são capturados nas chamadas de API.
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
Recomendamos também que oAWSIntegrações do Lambda e Kinesis Data Firehose com o Kinesis Data Streams que invocam oDescribeStream
A API é reconfigurada para que as integrações invoquemDescribeStreamSummary
eListShards
. Mais especificamente, paraAWSPor exemplo, você deve atualizar o mapeamento de origem do evento. Para o Kinesis Data Firehose, as permissões do IAM correspondentes devem ser atualizadas para que incluam oListShards
Permissão do IAM.
DescribeStreamAPI - Preterido
As informações abaixo descrevem uma maneira atualmente obsoleta de recuperar fragmentos de um fluxo de dados por meio doDescribeStreamAPI. No momento, é altamente recomendável usar oListShards
API para recuperar os fragmentos que compõem o fluxo de dados.
O objeto de resposta retornado pelo método describeStream
permite que você recupere informações sobre os estilhaços que compõem o stream. Para recuperar os estilhaços, chame o método getShards
para esse objeto. Esse método pode não retornar todos os estilhaços do stream em uma única chamada. No código a seguir, verificamos o método getHasMoreShards
em getStreamDescription
para ver se há outros estilhaços que não foram retornados. Se houver, ou seja, se esse método retornar true
, continuaremos chamando getShards
em um loop, adicionando cada novo lote de estilhaços retornados à nossa lista de estilhaços. O loop é encerrado quando getHasMoreShards
retorna false
, ou seja, todos os estilhaços tiverem sido retornados. Observe que getShards
não retorna estilhaços que estão no estado EXPIRED
. Para obter mais informações sobre estados de estilhaço, incluindo o estado EXPIRED
, consulte Roteamento de dados, persistência de dados e estado do estilhaço após um reestilhaçamento.
DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); List<Shard> shards = new ArrayList<>(); String exclusiveStartShardId = null; do { describeStreamRequest.setExclusiveStartShardId( exclusiveStartShardId ); DescribeStreamResult describeStreamResult = client.describeStream( describeStreamRequest ); shards.addAll( describeStreamResult.getStreamDescription().getShards() ); if (describeStreamResult.getStreamDescription().getHasMoreShards() && shards.size() > 0) { exclusiveStartShardId = shards.get(shards.size() - 1).getShardId(); } else { exclusiveStartShardId = null; } } while ( exclusiveStartShardId != null );