web-dev-qa-db-fra.com

plusieurs consommateurs par fragment kinésis

J'ai lu que vous pouvez avoir plusieurs applications grand public par flux kinésis.

http://docs.aws.Amazon.com/kinesis/latest/dev/developing-consumers-with-kcl.html

cependant, j'ai entendu dire que vous ne pouvez avoir qu'un seul consommateur par éclat. Est-ce vrai? Je ne trouve aucune documentation à l'appui de cela, et je ne peux pas imaginer comment cela pourrait être si plusieurs consommateurs lisent à partir du même flux. Cela ne signifie certainement pas que le producteur doit répéter le contenu dans différents fragments pour différents consommateurs.

16
bhomass

La bibliothèque cliente Kinesis démarre les threads en arrière-plan, chacun écoutant 1 fragment dans le flux. Vous ne pouvez pas vous connecter à un fragment sur plusieurs threads, c'est-à-dire par conception.

http://docs.aws.Amazon.com/kinesis/latest/dev/kinesis-record-processor-scaling.html

Par exemple, si votre application s'exécute sur une instance EC2 et traite un flux Amazon Kinesis comportant quatre fragments. Cette instance a un travailleur KCL et quatre processeurs d'enregistrement (un processeur d'enregistrement pour chaque fragment). Ces quatre processeurs d'enregistrement fonctionnent en parallèle dans le même processus.

Dans l'explication ci-dessus, le terme "travailleur KCL" fait référence à une application client Kinesis. Pas les fils.

Mais ci-dessous, le même terme "KCL worker" fait référence à un thread "Worker" dans l'application; qui est exécutable.

En règle générale, lorsque vous utilisez la KCL, vous devez vous assurer que le nombre d'instances ne dépasse pas le nombre de fragments (sauf à des fins de mise en attente de panne). Chaque fragment est traité par exactement un travailleur KCL et possède exactement un processeur d'enregistrement correspondant, vous n'avez donc jamais besoin de plusieurs instances pour traiter un fragment.

Voir la classe Worker.Java dans la source KCL.

17
az3

En retard à la fête, mais la réponse est que vous pouvez avoir plusieurs consommateurs par fragment de kinésis. Une instance KCL will ne démarre qu'un seul processus par partition, mais vous pouvez avoir une autre instance KCL consommant le même flux (et partition), en supposant que la seconde ait l'autorisation.

Il existe cependant des limites, comme indiqué dans les documents , notamment:

Chaque fragment peut prendre en charge jusqu'à 5 transactions par seconde pour les lectures, jusqu'à un taux de lecture total maximum de 2 Mo par seconde.

Si vous voulez un flux avec plusieurs consommateurs où chaque message sera traité une fois, vous êtes probablement mieux avec quelque chose comme Amazon Simple Queue Service .

9
Cameron Stone