Fusion de deux partitions - 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.

Fusion de deux partitions

Dans une fusion de partitions, deux partitions spécifiées sont combinées en une seule partition. Après la fusion, la partition enfant unique reçoit des données pour toutes les valeurs de clé de hachage couvertes par les deux partitions parent.

Partitions adjacentes

Pour fusionner deux partitions, celles-ci doivent être adjacentes. Deux partitions sont considérées adjacentes si l'union des plages de clés de hachage des deux partitions forme un ensemble contigu sans interruption. Par exemple, supposons que vous avez deux partitions, l'un avec une plage de clé de hachage de 276...381 et l'autre avec une plage de clé de hachage de 382...454. Vous pouvez fusionner ces deux partitions dans une seule partition qui aurait une plage de clé de hachage de 276...454.

Pour un exemple supplémentaire, supposons que vous avez deux partitions, dont une avec une plage de clé de hachage de 276...381 et l'autre avec une plage de clé de hachage de 455...560. Vous ne pouvez pas fusionner ces deux partitions, car il y a une ou plusieurs partitions entre celles-ci qui couvrent la plage 382...454.

L'ensemble de toutes les partitions OPEN d'un flux, en tant que groupe, s'étend toujours sur la plage entière des valeurs de la clé de hachage MD5. Pour plus d'informations sur les états des partitions, par exemple CLOSED, consultez Routage des données, persistance des données et état des partitions après un repartitionnement (français non garanti).

Pour identifier les partitions qui sont candidates à la fusion, vous devez filtrer toutes les partitions qui ont l'état CLOSED. Les partitions qui ont l'état OPEN, c'est-à-dire qui n'ont pas l'état CLOSED, ont un numéro de séquence de fin de null. Vous pouvez tester le numéro de séquence de fin d'une partition en utilisant :

if( null == shard.getSequenceNumberRange().getEndingSequenceNumber() ) { // Shard is OPEN, so it is a possible candidate to be merged. }

Après avoir filtré les partitions fermées, triez les partitions restantes sur la valeur de clé de hachage maximale prise en charge par chaque partition. Vous pouvez extraire cette valeur en utilisant :

shard.getHashKeyRange().getEndingHashKey();

Si deux partitions sont adjacentes dans cette liste filtrée et triée, elles peuvent être fusionnées.

Code pour l'opération de fusion

Le code ci-après fusionne deux partitions. Ce code suppose que myStreamName contient le nom de votre flux et que les variables d'objet shard1 et shard2 contiennent les deux partitions adjacentes à fusionner.

Pour l'opération de fusion, commencez par instancier un nouvel objet mergeShardsRequest. Spécifiez le nom du flux avec la méthode setStreamName. Spécifiez ensuite les deux partitions à fusionner à l'aide des méthodes setShardToMerge et setAdjacentShardToMerge. Pour finir, appelez la méthode mergeShards sur le client Kinesis Data Streams pour effectuer l'opération.

MergeShardsRequest mergeShardsRequest = new MergeShardsRequest(); mergeShardsRequest.setStreamName(myStreamName); mergeShardsRequest.setShardToMerge(shard1.getShardId()); mergeShardsRequest.setAdjacentShardToMerge(shard2.getShardId()); client.mergeShards(mergeShardsRequest);

La première étape qui suit cette procédure est présentée dans Besoin d'attendre qu'un flux redevienne actif.