AWS Kinesis, 보장 된 주문이있는 동시 Lambda 처리

Aug 19 2020

Kinesis 스트림 소비자 (임의의 샤드 포함)를 가리키는 이벤트 소스가있는 Lambda가 있습니다.

동일한 '파티션 키'를 가진 스트림의 항목이 Lambda에서 동시에 처리되지 않고 순서대로 처리되도록하고 싶습니다. (이는 객체의 ID로 사용되며 동일한 객체에 대해 논리를 동시에 수행하는 여러 Lambda를 원하지 않습니다.)

예를 들어 스트림의 항목에 파티션 키가있는 경우 :

1,2,1,3,4,1,2,1

처리 순서를 왼쪽에서 오른쪽으로 선택하면 Lambda는 각 파티션 키 1,2, 3 및 4가있는 항목을 동시에 처리합니다. 그런 다음 특정 파티션 키로 항목을 완료하면 해당 키로 다른 항목 처리를 시작할 수 있습니다.

Lambda를 비효율적으로 사용하는 분산 잠금을 사용하지 않고도 어떤 방식 으로든이 작업을 수행 할 수 있습니까?

감사

답변

numX Aug 20 2020 at 13:23

내가 잘못된 방식으로 문제를 해결하는 것 같습니다. Lambda는 샤드 내에서 Lambda 인스턴스가 한 번에 하나의 배치에서 호출되도록 보장합니다. 따라서 최악의 경우 동일한 일괄 처리에서 동일한 엔터티에 속하는 여러 레코드가 있고이를 순서대로 처리하는 것은 Lambda 함수 자체 내에서 메모리 내에서 관리 될 수 있으므로 분산 잠금이 필요하지 않습니다.

AWS FAQ의 참조 http://aws.amazon.com/lambda/faqs/

Q : AWS Lambda는 Amazon Kinesis 스트림 및 Amazon DynamoDB 스트림의 데이터를 어떻게 처리합니까?

AWS Lambda 함수로 전송 된 Amazon Kinesis 및 DynamoDB Streams 레코드는 샤드별로 엄격하게 직렬화됩니다. 즉, 동일한 샤드에 두 개의 레코드를 넣는 경우 Lambda는 Lambda 함수가 두 번째 레코드로 호출되기 전에 첫 번째 레코드로 Lambda 함수가 성공적으로 호출되도록 보장합니다 . 한 레코드에 대한 호출이 시간 초과되거나, 제한되거나, 다른 오류가 발생하면 Lambda는 성공할 때까지 (또는 레코드가 24 시간 만료에 도달 할 때까지) 다시 시도한 후 다음 레코드로 이동합니다. 서로 다른 샤드의 레코드 순서는 보장되지 않으며 각 샤드의 처리는 병렬로 발생합니다.