AWS Kinesis, параллельная обработка Lambda с гарантированным порядком
У меня есть лямбда с источником события, указывающим на потребителя потока Kinesis (с произвольным количеством шардов)
Я хотел бы убедиться, что элементы в потоке с одним и тем же «ключом раздела» обрабатываются Lambda последовательно, а не одновременно. (Это используется в качестве идентификатора объекта, и я не хочу, чтобы несколько Lambdas выполняли логику для одного и того же объекта одновременно.)
Например, если элементы в потоке имеют ключи секций:
1,2,1,3,4,1,2,1
Если мы возьмем порядок обработки слева направо, Lambda будет обрабатывать элемент с каждым из ключей раздела 1, 2, 3 и 4 одновременно. Затем, когда он закончил элемент с определенным ключом раздела, он может начать обработку другого элемента с этим ключом.
Возможно ли это каким-то образом без использования распределенной блокировки, которая неэффективно использовала бы Lambda?
благодаря
Ответы
Похоже, я неправильно решил проблему. Lambda гарантирует, что внутри осколка экземпляр Lambda вызывается для одного пакета за раз. Следовательно, нет необходимости в распределенной блокировке, поскольку в худшем случае в одном пакете будет несколько записей, принадлежащих одной и той же сущности, и их обработка по порядку может управляться в памяти внутри самой лямбда-функции.
Ссылка из раздела часто задаваемых вопросов AWS http://aws.amazon.com/lambda/faqs/
Вопрос: Как AWS Lambda обрабатывает данные из потоков Amazon Kinesis и Amazon DynamoDB Streams?
Записи Amazon Kinesis и DynamoDB Streams, отправляемые в вашу функцию AWS Lambda, строго сериализуются для каждого сегмента. Это означает, что если вы поместите две записи в один и тот же сегмент, Lambda гарантирует, что ваша функция Lambda будет успешно вызвана с первой записью, прежде чем она будет вызвана со второй записью . Если время вызова одной записи истекло, было ограничено или возникла какая-либо другая ошибка, Lambda будет повторять попытки, пока не завершится успешно (или запись не истечет 24 часа), прежде чем перейти к следующей записи. Порядок записей по разным шардам не гарантируется, и обработка каждого шарда происходит параллельно.