Dividir una partición - 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.

Dividir una partición

Para dividir una partición en Amazon Kinesis Data Streams, debe especificar cómo deben redistribuirse los valores de clave hash de la partición principal a las particiones secundarias. Cuando añade un registro de datos a una secuencia, se asigna a un fragmento según un valor de clave hash. El valor de clave hash es el hash MD5 de la clave de partición que especifica para el registro de datos en el momento de añadirlo a la secuencia. Los registros de datos que tengan la misma clave de partición también tienen el mismo valor de clave hash.

Los valores de clave hash posibles para un fragmento dado constituyen un conjunto de valores enteros positivos, ordenados y contiguos. Esta serie de posibles valores de clave hash viene dada por:

shard.getHashKeyRange().getStartingHashKey(); shard.getHashKeyRange().getEndingHashKey();

Al dividir el fragmento especifica un valor de este rango. Ese valor de clave hash y todos los valores de clave hash superiores se distribuyen a uno de los fragmentos secundarios. Todos los valores de clave hash inferiores se distribuyen a los demás fragmentos secundarios.

El código siguiente ilustra una operación de división de fragmentos que redistribuye las claves hash de manera uniforme entre cada uno de los fragmentos secundarios, básicamente dividiendo a la mitad el fragmento principal. Esta es solo una de las posibles formas de dividir el fragmento principal. Podría, por ejemplo, dividir el fragmento de forma que el tercio más bajo de las claves del fragmento principal vaya a uno de los fragmentos secundarios y los dos tercios más altos de las claves vayan al otro fragmento secundario. Sin embargo, para muchas aplicaciones, la división de fragmentos a la mitad resulta un enfoque eficaz.

El código asume que myStreamName contiene el nombre de la secuencia y la variable de objeto shard contiene el fragmento que se ha de dividir. Empiece por crear una instancia de un nuevo objeto splitShardRequest y por introducir un nombre para la secuencia y una ID para el fragmento.

SplitShardRequest splitShardRequest = new SplitShardRequest(); splitShardRequest.setStreamName(myStreamName); splitShardRequest.setShardToSplit(shard.getShardId());

Determine el valor de clave hash que está a medio camino entre los valores mínimo y máximo del fragmento. Este será el valor de clave hash inicial para el fragmento secundario que contendrá la mitad superior de las claves hash del fragmento principal. Especifique este valor en el método setNewStartingHashKey. Solo necesita especificar este valor. Kinesis Data Streams distribuye automáticamente las claves hash por debajo de este valor a la otra partición primaria creada por la división. El último paso consiste en llamar al método splitShard en el cliente de Kinesis Data Streams.

BigInteger startingHashKey = new BigInteger(shard.getHashKeyRange().getStartingHashKey()); BigInteger endingHashKey = new BigInteger(shard.getHashKeyRange().getEndingHashKey()); String newStartingHashKey = startingHashKey.add(endingHashKey).divide(new BigInteger("2")).toString(); splitShardRequest.setNewStartingHashKey(newStartingHashKey); client.splitShard(splitShardRequest);

El primer paso tras este procedimiento se muestra en Esperar a que un flujo se active de nuevo.