
DynamoDB Streams와 AWS Lambda를 사용하여 채팅 메시지를 처리하고 싶습니다. 같은 대화에 관한 메시지user_idX:user_idY(객실)을 순서대로 처리해야 합니다. 전역 순서는 중요하지 않습니다.
DynamoDB를 올바른 순서(room:msg1, room:msg2 등)로 공급한다고 가정하면 스트림이 AWS Lambda에 순차적으로 공급되도록 보장하는 방법은 다음과 같습니다.단일 스트림 전반에 걸쳐 관련 메시지(방) 처리 순서 보장?
예를 들어 샤드가 2개인 경우 논리 그룹이 동일한 샤드로 이동하는지 확인하는 방법은 무엇입니까?
나는 이것을 완수해야 한다:
Shard 1: 12:12:msg3 12:12:msg2 12:12:msg1 ==> consumer
Shard 2: 13:24:msg2 51:91:msg3 13:24:msg1 51:92:msg2 51:92:msg1 ==> consumer
그리고 이것은 아닙니다(메시지는 데이터베이스에 저장한 순서를 따르지만 다른 샤드에 배치되어 동일한 방에 대해 다른 시퀀스를 병렬로 잘못 처리함).
Shard 1: 13:24:msg2 51:92:msg2 12:12:msg2 51:92:msg2 12:12:msg1 ==> consumer
Shard 2: 51:91:msg3 12:12:msg3 13:24:msg1 51:92:msg1 ==> consumer
이 공식우편이것을 언급했지만 문서에서 구현 방법을 찾을 수 없었습니다.
단일 기본 키에 대한 일련의 변경 사항에 대한 상대적 순서는 샤드 내에서 유지됩니다. 또한, 주어진 키는 주어진 시점에 활성화된 형제 샤드 세트 중 최대 하나에 존재합니다. 결과적으로, 항목의 변경 사항을 정확하게 추적하기 위해 코드는 샤드 내의 스트림 레코드를 간단히 처리할 수 있습니다.
질문
1) DynamoDB 스트림에서 파티션 키를 설정하는 방법은 무엇입니까?
2) 파티션 키의 일관된 전달을 보장하는 스트림 샤드를 생성하는 방법은 무엇입니까?
3) 결국 이것이 정말 가능할까요? 공식 기사에서는 다음과 같이 언급합니다.주어진 키는 주어진 시점에 활성화된 형제 샤드 세트 중 최대 하나에 존재합니다.그러면 위의 예처럼 msg1이 샤드 1로 이동한 다음 msg2가 샤드 2로 이동하는 것 같습니다.
4) 에서이것질문, 제가 찾은 내용은 다음과 같습니다.
스트림에 있는 샤드의 양은 테이블에 있는 파티션의 양에 따라 결정됩니다. 따라서 4개의 파티션이 있는 DDB 테이블이 있는 경우 스트림에는 4개의 샤드가 있습니다. 각 샤드는 특정 파티션에 해당하므로 동일한 파티션 키를 가진 모든 항목이 동일한 파티션에 있어야 한다는 점은 해당 항목이 동일한 샤드에 존재한다는 의미이기도 합니다.
이는 내가 필요한 것을 자동으로 달성할 수 있다는 의미입니까?"동일한 파티션을 가진 모든 항목은 동일한 샤드에 존재합니다". Lambda는 이를 존중합니까?
5) 에서자주하는 질문:
여러 샤드에 걸친 레코드 순서는 보장되지 않으며 각 샤드의 처리는 병렬로 발생합니다.
나는 전역 순서에 신경 쓰지 않고 예를 들어 논리적 순서만 신경 씁니다. 그러나 샤드 그룹이 FAQ의 이 답변으로 논리적으로 그룹화되어 있는지는 확실하지 않습니다.
답변1
이 답변이 도움이 됩니까?
https://stackoverflow.com/questions/44266633/how-do-dynamodb-streams-distribute-records-to-shards
여러 샤드에 걸친 레코드 순서는 보장되지 않으며 각 샤드의 처리는 병렬로 발생합니다.