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.
Fusionner 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 OPEN
partitions d'un flux, en tant que groupe, couvre toujours l'ensemble des valeurs des clés de hachage. MD5 Pour plus d'informations sur les états des partitions, par exemple CLOSED
, consultez Tenez compte du routage des données, de la persistance des données et de l'état de la partition après une refonte (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 Attendre qu'un stream redevienne actif.