AWS Kinesis, traitement Lambda simultané avec une commande garantie
J'ai un Lambda avec une source d'événements pointée vers un consommateur de flux Kinesis (avec un nombre arbitraire de fragments)
Je voudrais m'assurer que les éléments du flux avec la même «clé de partition» sont traités par Lambda dans l'ordre et non simultanément. (Ceci est utilisé comme identité de l'objet, et je ne veux pas que plusieurs Lambdas exécutent la logique sur le même objet simultanément.)
Par exemple, si les éléments du flux ont des clés de partition:
1,2,1,3,4,1,2,1
Si nous prenons l'ordre de traitement de gauche à droite, Lambda traiterait un élément avec chacune des clés de partition 1, 2, 3 et 4 simultanément. Ensuite, lorsqu'il a terminé un élément avec une clé de partition spécifique, il peut commencer à en traiter un autre avec cette clé.
Est-ce réalisable d'une manière ou d'une autre, sans l'utilisation d'un verrou distribué qui rendrait l'utilisation inefficace de Lambda?
Merci
Réponses
On dirait que je m'attaquais au problème de la mauvaise manière. Lambda garantit que dans une partition, l'instance Lambda est appelée sur un lot à la fois. Par conséquent, il n'y a pas besoin d'un verrou distribué car au pire, il y aura plusieurs enregistrements appartenant à la même entité dans le même lot et leur traitement dans l'ordre peut être géré en mémoire dans la fonction Lambda elle-même.
Référence de la FAQ AWS http://aws.amazon.com/lambda/faqs/
Q: Comment AWS Lambda traite-t-il les données des flux Amazon Kinesis et des flux Amazon DynamoDB?
Les enregistrements Amazon Kinesis et DynamoDB Streams envoyés à votre fonction AWS Lambda sont strictement sérialisés, par partition. Cela signifie que si vous placez deux enregistrements dans la même partition, Lambda garantit que votre fonction Lambda sera appelée avec succès avec le premier enregistrement avant qu'elle ne soit appelée avec le deuxième enregistrement . Si l'appel d'un enregistrement expire, est limité ou rencontre une autre erreur, Lambda réessayera jusqu'à ce qu'il réussisse (ou que l'enregistrement atteigne son expiration de 24 heures) avant de passer à l'enregistrement suivant. L'ordre des enregistrements entre différents fragments n'est pas garanti et le traitement de chaque fragment se déroule en parallèle.