44 votes

Qu'est-ce que la clé de partition dans AWS Kinesis?

J'ai lu sur AWS Kinesis. Dans le programme suivant, j'ai données à écrire dans le flux nommé TestStream. J'ai couru ce morceau de code 10 fois, l'insertion de 10 enregistrements dans le flux.

var params = {
    Data: 'More Sample data into the test stream ...',
    PartitionKey: 'TestKey_1',
    StreamName: 'TestStream'
};

kinesis.putRecord(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
});

Tous les enregistrements ont été insérés avec succès. Qu'est - partition key vraiment dire par là? Qu'est-ce que ça fait en arrière-plan? J'ai lu sa documentation , mais ne pas comprendre ce que cela signifiait.

70voto

kdgregory Points 21849

Clés de Partition seule question lorsque vous avez plusieurs fragments dans un cours d'eau (mais ils le sont toujours). Kinesis calcule le hash MD5 d'une clé de partition pour décider de ce fragment pour stocker l'enregistrement (si vous en décrire le flux que vous verrez le hachage de gamme comme une partie de l'éclat de description).

Alors, pourquoi est-ce important?

Chaque fragment ne peut accepter de 1 000 enregistrements et/ou de 1 MO par seconde (voir PutRecord doc). Si vous écrivez à un seul fragment plus rapidement que ce rythme, vous aurez un ProvisionedThroughputExceededException.

Avec de multiples serveurs, la mise à l'échelle de cette limite: 4 tessons vous donne de 4 000 enregistrements et/ou 4 MO par seconde. Bien sûr, il y a des bémols.

Le plus important est que vous devez utiliser différentes clés de partition. Si tous les enregistrements de votre utilisation de la même clé de partition alors vous êtes encore écrit d'un seul éclat, parce qu'ils ont tous la même valeur de hachage. Comment vous résoudre cela dépend de votre application: si vous êtes à la rédaction de plusieurs processus, alors il peut être suffisant d'utiliser l'ID de processus du serveur d'adresse IP ou le nom d'hôte. Si vous êtes à l'écriture à partir d'un seul et même processus, alors vous pouvez soit utiliser l'information qui est dans le dossier (par exemple, un dossier unique ID) ou générer une chaîne de caractères aléatoires.

Deuxième mise en garde est que la partition de la clé de chefs d'accusation contre le montant de la réduction de la taille, et est stocké dans le ruisseau. Ainsi, alors que vous pourriez probablement obtenir un bon caractère aléatoire à l'aide de certains élément textuel dans l'enregistrement, vous seriez perdre de l'espace. D'autre part, si vous avez quelques aléatoire élément textuel, vous pouvez calculer votre propre hachage, puis stringify que pour la partition de la clé.

Enfin, si vous utilisez PutRecords (que vous devriez, si vous êtes à la rédaction d'un grand nombre de données), les dossiers individuels dans la requête peut être rejetée, tandis que d'autres sont acceptés. Cela se produit parce que ces enregistrements sont allés à un éclat qui a déjà à son écriture limites, et vous devez l'envoyer à nouveau (après un délai).

34voto

Tomer Points 184

La accepté de répondre explique ce que sont les clés de partition et et de ce qu'ils sont utilisés dans le Kinesis (à décider de ce qui tesson pour envoyer les données). Malheureusement, il n'explique pas pourquoi la partition clés sont nécessaires à la première place.

En théorie AWS pourrait créer aléatoirement une clé de partition pour chaque enregistrement, le résultat sera un quasi-parfaite de la propagation.

La vraie raison partitions sont utilisés pour la commande/diffusion". Kinesis maintient de la commande (numéro de séquence) pour chaque fragment.

En d'autres termes, en streaming X et par la suite Y fragment Z, il est garanti que X sera tiré à partir du cours d'eau avant de Y (lors de l'extraction des enregistrements de tous les tessons). D'autre part, par streaming X fragment de Z1 et par la suite Y fragment Z2 il n'y a aucune garantie sur le bon de commande (lors de l'extraction des enregistrements de tous les tessons). Y peut certainement être tiré avant de X.

Le shard "streaming" fonctionnalité est utile dans de nombreux cas.

(E. g. un service de vidéo en streaming un film à un utilisateur en utilisant le nom d'utilisateur et le nom du film que la clé de partition).

(E. g. travailler sur un flux d'événements communs, et de l'application de l'agrégation).

Dans le cas où la commande (streaming) ou un groupement (e.g agrégation) n'est pas nécessaire de générer aléatoirement une clé de partition suffira.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X