Après le repartitionnement - Amazon Kinesis Data Streams

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Après le repartitionnement

Après tout type de procédure de repartitionnement dans Amazon Kinesis Data Streams et avant la reprise du traitement normal des enregistrements, d'autres procédures doivent être effectuées et d'autres éléments doivent être pris en compte. Les sections suivantes décrivent ces procédures et considérations.

Besoin d'attendre qu'un flux redevienne actif

Après avoir appelé une opération de repartitionnement, soit splitShard ou mergeShards, vous devez attendre que le flux redevienne actif. Le code à utiliser est le même que lorsque vous attendez qu'un flux devienne actif après la création d'un flux. Ce code se présente comme suit :

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" ); }

Routage des données, persistance des données et état des partitions après un repartitionnement

Kinesis Data Streams est un service de streaming de données en temps réel, qui veut dire que vos applications doivent assumer que les données circulent en permanence au travers des partitions de votre flux. Lorsque vous repartitionnez, les enregistrements de données qui étaient acheminés vers les partitions parent sont réacheminés vers les partitions enfant en se basant sur les valeurs de clé de hachage auxquelles sont mappées les clés de partition des enregistrements de données. Toutefois, les enregistrements de données qui se trouvaient dans les partitions parent avant le repartitionnement demeurent dans ces partitions. En d'autres termes, les partitions parentes ne disparaissent pas lorsque le repartitionnement a lieu. Elles demeurent avec les données qu'elles contiennent avant le repartitionnement. Les enregistrements de données figurant dans les partitions parent sont accessibles à l'aide des opérations getShardIterator et getRecords dans l'API Kinesis Data Streams, ou via la Kinesis Client Library.

Note

Les enregistrements de données sont accessibles à partir du moment où ils sont ajoutés au flux jusqu'à la période de conservation actuelle. Cette constatation demeure vraie, quelles que soient les modifications apportées aux partitions du flux au cours de cette période. Pour plus d'informations sur la période de conservation d'un flux, consultez la page Modification de la période de conservation des données.

Au cours du processus de repartitionnement, une partition parent passe de l'état OPEN à l'état CLOSED, puis à l'état EXPIRED.

  • OPEN (OUVERT) : avant une opération de repartitionnement, une partition parent a l'état OPEN, qui signifie que des enregistrements de données peuvent être à la fois ajoutés à la partition et extraits de celle-ci.

  • CLOSED (FERMÉ) : après une opération de repartitionnement, la partition parent passe à l'état CLOSED. Cela signifie qu'aucun enregistrement de données n'est plus ajouté à la partition. Les enregistrements de données qui auraient été ajoutés à cette partition sont maintenant ajoutés à une partition enfant. Toutefois, des enregistrements de données peuvent encore être extraits de la partition pendant une durée limitée.

  • EXPIRED (EXPIRÉ) : une fois que la période de conservation du flux a expiré, tous les enregistrements de données de la partition parent ont expiré et ne sont plus accessibles. À ce stade, la partition elle-même passe à l'état EXPIRED. Les appels de getStreamDescription().getShards pour énumérer les partitions du flux n'incluent pas les partitions à l'état EXPIRED dans la liste des partitions renvoyées. Pour plus d'informations sur la période de conservation d'un flux, consultez la page Modification de la période de conservation des données.

Lorsque le repartitionnement est terminé et que le flux a de nouveau l'état ACTIVE, vous pouvez commencer immédiatement à lire les données dans les partitions enfant. Cependant, les partitions parentes qui restent après le repartitionnement peuvent encore contenir des données que vous n'avez pas encore lues et qui ont été ajoutées au flux avant le repartitionnement. Si vous lisez les données des partitions enfant avant d'avoir lu toutes les données des partitions parent, vous pouvez lire les données pour une clé de hachage spécifique sans respecter l'ordre donné par les numéros de séquence des enregistrements de données. Par conséquent, en supposant que l'ordre des données soit important, après un repartitionnement, vous devez toujours continuer à lire les données des partitions parentes jusqu'à leur épuisement. Ensuite seulement, vous devez commencer à lire les données des partitions enfants. Lorsque getRecordsResult.getNextShardIterator renvoie null, cela indique que vous avez lu toutes les données de la partition parent. Si vous lisez des données en utilisant la Kinesis Client Library, la bibliothèque garantit que vous recevez les données dans l'ordre même si un repartitionnement a été effectué.