Première question: combien de fragments avez-vous ouverts dans le flux? Vous obtenez seulement 1 instance du lambda par fragment en cours d'exécution. Donc, si vous n'avez qu'un seul fragment, vous n'aurez qu'un seul lambda à la fois sur votre instance RDS.
Avez-vous des données qui indiquent que c'est un problème?
Ce qui suit est un pirater qui peuvent ou peuvent ne pas fonctionner de manière fiable. Et ne devrait probablement pas être utilisé dans un environnement prod.
Pour une taille de lot minimum, vous pouvez renvoyer un error
à partir de votre fonction node.js lambda si la taille du lot est inférieure au nombre d'enregistrements souhaité.
E.g.
handler(event, context, callback) {
const records = event.Records;
if (records.length() < minBatchSize) {
callback('insufficient batch size');
} else {
processRecords(records, callback);
}
}
MAIS deux problèmes viennent à l'esprit:
1) Vous ne pouvez pas le faire indéfiniment sans courir le risque de perte de données car il y a une limite de temps maximale de l'événement qui est configuré sur votre flux. Après cette heure, les enregistrements disparaissent du flux. Notez que vous payez un supplément pour cette fonctionnalité (voir extended data retention).
Vous pouvez déduire l'âge du lot à partir des métriques d'âge de l'itérateur de fragment lambda/kinesis, voir http://docs.aws.amazon.com/streams/latest/dev/monitoring-with-cloudwatch.html.
Je ne suis pas sûr de la fiabilité de ceci, surtout si vous avez plus d'un fragment, mais par ex.
handler(event, context, callback) {
const records = event.Records;
if (records.length() < minBatchSize) {
if (calculateLambdaAge() > tooLongDelayThreshold) {
processRecords(records, callback);
} else {
callback(new Error('insufficient batch size'));
}
} else {
processRecords(records, callback);
}
}
calculateLambdaAge() {
// interrogate cloudwatch
}
Si CloudWatch ne vous dira pas, vous devrez peut-être de garder une trace de vous-même quelque part qui est au moins aussi évolutive que votre RDS (Redis/dynamo). 2) Plutôt que de vous efforcer de rendre le # 1 fiable, est-ce que cet effort supplémentaire pourrait simplement être utilisé pour augmenter la taille de votre instance RDS et rendre votre utilisation actuelle plus efficace?
J'ai parlé this et this lors de la constitution des échantillons de code.