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á.
Conclua a ação de refragmentação
Após qualquer tipo de procedimento de refragmentação no Amazon Kinesis Data Streams e antes de retomar o processamento normal de registros, é necessário realizar outros procedimentos e fazer algumas considerações. As seções a seguir descrevem esses itens.
Tópicos
Aguarde até que um stream se torne ativo novamente
Depois de chamar uma operação de refragmentaçãomergeShards
, você deve esperar que o stream fique ativo novamente. splitShard
O código a ser usado é o mesmo de quando você espera que um streaming se torne ativo após a criação de um streaming. Esse código é o seguinte:
DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); long startTime = System.currentTimeMillis(); long endTime = startTime + ( 10 * 60 * 1000 ); while ( System.currentTimeMillis() < endTime ) { try { Thread.sleep(20 * 1000); } catch ( Exception e ) {} try { DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest ); String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus(); if ( streamStatus.equals( "ACTIVE" ) ) { break; } // // sleep for one second // try { Thread.sleep( 1000 ); } catch ( Exception e ) {} } catch ( ResourceNotFoundException e ) {} } if ( System.currentTimeMillis() >= endTime ) { throw new RuntimeException( "Stream " + myStreamName + " never went active" ); }
Considere o roteamento de dados, a persistência de dados e o estado do fragmento após uma nova fragmentação
O Kinesis Data Streams é um serviço de streaming de dados em tempo real. Seus aplicativos devem presumir que os dados estão fluindo continuamente pelos fragmentos do seu stream. Quando você reestilhaça, os registros de dados que estavam fluindo para os estilhaços pais são re-roteados para fluírem para os estilhaços filhos com base nos valores de chave de hash para as quais são mapeadas as chaves de partição de registro de dados. No entanto, os registros de dados que estavam nos estilhaços pais antes do reestilhaçamento permanecem nesses estilhaços. Os fragmentos originais não desaparecem quando a nova fragmentação ocorre. Eles persistem com os dados que continham antes do reestilhaçamento. Os registros de dados nos fragmentos principais podem ser acessados usando as getRecords
operações getShardIteratore no Kinesis Data API Streams ou por meio da Kinesis Client Library.
nota
Os registros de dados podem ser acessados a partir do momento em que são adicionados ao stream até o período de retenção atual. Isso é verdadeiro independentemente de quaisquer alterações aos estilhaços no stream durante esse período. Para obter mais informações sobre o período de retenção de um stream, consulte Alterar o período de retenção de dados.
No processo de reestilhaçamento, um estilhaço pai passa de um estado OPEN
para um estado CLOSED
para um estado EXPIRED
.
-
OPEN: antes de uma operação de refragmentação, um fragmento principal está no
OPEN
estado, o que significa que os registros de dados podem ser adicionados ao fragmento e recuperados do fragmento. -
CLOSED: após uma operação de refragmentação, o fragmento principal passa para um estado.
CLOSED
Isso significa que os registros de dados não são mais adicionados ao estilhaço. Os registros de dados que foram adicionados a esse estilhaço agora são adicionados a um estilhaço filho. No entanto, os registros de dados ainda podem ser recuperados do estilhaço por tempo limitado. -
EXPIRED: após o término do período de retenção do stream, todos os registros de dados no fragmento principal expiram e não estão mais acessíveis. Neste momento, o próprio estilhaço muda para um estado
EXPIRED
. As chamadas agetStreamDescription().getShards
para enumerar os estilhaços no stream não incluem os estilhaçosEXPIRED
na lista de estilhaços retornados. Para obter mais informações sobre o período de retenção de um stream, consulte Alterar o período de retenção de dados.
Depois que o reestilhaçamento ocorreu e o stream está novamente em um estado ACTIVE
, você pode iniciar imediatamente a ler dados dos estilhaços filhos. No entanto, os fragmentos principais que permanecem após a refragmentação ainda podem conter dados que você ainda não leu e que foram adicionados ao stream antes da refragmentação. Se você ler dados de estilhaços filhos antes ler todos os dados dos estilhaços pais, poderá ler dados de uma determinada chave de hash fora da ordem determinada pelos números sequenciais dos registros de dados. Portanto, pressupondo que a ordem dos dados é importante, você deve, após um reestilhaçamento, sempre continuar lendo dados dos estilhaços pais até esgotá-los. Só depois você deverá começar a ler dados dos estilhaços filhos. Quando getRecordsResult.getNextShardIterator
retorna null
, indica que você leu todos os dados no estilhaço pai. Se você estiver lendo dados usando a Biblioteca de cliente do Kinesis, talvez você não receba os dados em ordem após a ocorrência de uma nova fragmentação.