Combina dos fragmentos - Amazon Kinesis Data Streams

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Combina dos fragmentos

Una operación de fusión toma dos fragmentos especificados y los combina en un único fragmento. Tras la fusión, el fragmento secundario recibe los datos de todos los valores de claves hash que cubrían los dos fragmentos principales.

Adyacencia de fragmentos

Para fusionar dos fragmentos, estos deben ser adyacentes. Se considera que dos fragmentos son adyacentes si la unión de los rangos de las claves hash de ambos forma un conjunto continuo sin huecos. Por ejemplo, supongamos que tiene dos fragmentos, uno con un rango de clave hash de 276...381 y el otro con un rango de clave hash de 382...454. Podría fusionar estos dos fragmentos en uno, que tendría un rango de clave hash de 276...454.

Por tomar otro ejemplo, supongamos que tiene dos fragmentos, uno con un rango de clave hash de 276...381 y el otro con un rango de clave hash de 455...560. No es posible combinar estos dos fragmentos, ya que habría uno o varios fragmentos entre ellos abarcando el rango 382...454.

El conjunto de todos los OPEN fragmentos de una transmisión, como grupo, siempre abarca todo el rango de valores de las claves hash. MD5 Para obtener más información sobre los estados de los fragmentos, como CLOSED, consulte Considere el enrutamiento de datos, la persistencia de los datos y el estado de la partición después de volver a compartirla.

Para identificar fragmentos candidatos a la fusión, debe filtrar todos los que están en un estado CLOSED. Las particiones que están OPEN (es decir, no CLOSED) tienen un número secuencial final de null. Puede comprobar el número secuencial final de un fragmento con:

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

Después de filtrar los fragmentos cerrados, ordene los fragmentos restantes por el valor de clave hash más alto que permita cada fragmento. Puede recuperar este valor mediante:

shard.getHashKeyRange().getEndingHashKey();

Si hay dos fragmentos adyacentes en la lista filtrada y ordenada, se pueden fusionar.

Código para la operación de fusión

Con el siguiente código se fusionan dos fragmentos. El código asume que myStreamName contiene el nombre de la secuencia y las variables de objeto shard1 y shard2 contienen los dos fragmentos adyacentes que se han de fusionar.

Para la operación de fusión, comience por crear una instancia de un nuevo objeto mergeShardsRequest. Especifique el nombre de la secuencia con el método setStreamName. A continuación, especifique qué dos fragmentos quiere fusionar con los métodos setShardToMerge y setAdjacentShardToMerge. Por último, llame al método mergeShards en el cliente de Kinesis Data Streams para realizar la operación.

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

El primer paso tras este procedimiento se muestra en Espere a que una transmisión vuelva a activarse.