Ordering data into Kinesis
- 도로에 트럭이 100대 있고 각각 트럭 ID가 있을 때 GPS 위치를 주기적으로 AWS에 보내야 하며
각 트럭의 순서대로 데이터를 소비해서 드럭의 이동을 정확하게 추적하고 그 경로를 순서대로 확인하려고 함
이 때 어떻게 Kinesis로 데이터를 전달할까? - 파티션 키인 트럭 ID를 사용해야 함
같은 파티션 키를 지정하면 해당 키는 언제나 동일한 샤드로 전달되므로
트럭 1은 트럭 1의 파티션 키를 전송하고, 트럭 2는 트럭 2의 파티션 키를 전송할 것임 - Kinesis Data Steams과 샤드 1, 2, 3번인 3개가 있고 트럭이 5대가 있을 때 트럭 ID를 파티션 키로 하여 Kinesis에 데이터 전송
트럭 1이 GPS 데이터를 보낼 때 Kinesis로 트럭 1의 파티션 키를 보내게 되며,
Kinesis는 트럭 1의 파티션 키를 해시(계산)하여 트럭 1의 데이터가 샤드 1번으로 간다는 것을 알아내게 되어 샤드 1번으로 이동
트럭 2이 데이터를 전송하면 Kinesis는 해당 파티션 키를 확인하고 해시를 한 후 해당 값이 샤드 2번으로 들어가도록 함
트럭 3이 데이터를 전송하면 Kinesis는 해당 파티션 키를 확인하고 해시를 한 후 해당 값이 3번이 아닌 1번으로 들어가도록 결정
이후 계속해서 그 트럭은 시간이 흐름에 따라 동일한 파티션 키를 전송하므로 데이터가 언제나 같은 샤드로 이동하게 됨
트럭 1과 3의 데이터는 항상 샤드 1에, 트럭 2와 5의 데이터는 항상 샤드 2에, 트럭 4의 데이터는 항상 샤드 3에 전송되며
만약 트럭 100대와 샤드 5개가 있다면 하면 각 샤드는 평균 20대의 트럭을 가지게 될 것임
트럭과 각각의 샤드는 직접적으로 연결된 것이 아니며, Kinesis가 파티션 키를 해시해서 어느 샤드로 보낼지 결정하는 것!
즉, 안정된 파티션 키를 얻으면 트럭이 그 데이터를 같은 샤드로 전달하고 샤드 레벨에서 트럭의 순서에 따른 데이터를 얻게 됨
Ordering data into SQS
- SQS 표준 방식에서는 순서가 없으므로 SQS FIFO라는 선입 선출 방식을 이용하며
SQS FIFO의 그룹 ID를 사용하지 않는다면 모든 메시지가 소비되는 방식은 보내진 순서에 따르며 소비자는 하나만 존재
SQS FIFO 대기열로 전송이 될 때 전송되는 순서대로 소비자가 수신을 받을 것이며
소비자는 하나이기 때문에 두 배치의 메시지를 소비
따라서 FIFO 방식으로는 판단하기 쉬우며 소비자도 하나만 가질 수 있음
즉, 모든 트럭이 FIFO 대기열로 데이터를 보내더라도 소비자는 하나뿐
- 만약 소비자 숫자를 스케일링하고 서로 연관된 메시지를 그룹화하려는 경우 그룹 ID를 사용할 수 있음
그룹 ID는 Kinesis의 파티션 키와 비슷한 개념으로
그룹 ID를 사용하면 FIFO 대기열은 FIFO 내부에 두 개 그룹이 생기며 정의한 그룹마다 각각 소비자를 가질 수 있게 됨
그룹 A와 그룹 B는 두 개의 소비자인 소비자 1과 소비자 2는 독자적으로 이들을 읽을 수 있음
그룹 ID가 많을수록 소비자도 많아짐
Kinesis vs SQS ordering
- 트럭이 100대가 있고 Kinesis 샤드가 5개, SQS FIFO 대기열이 1개라면
- Kinesis Data Steams에서 평균적으로 가지는 값은 샤드당 트럭 20대가 되며
해시 기능 덕분에 각 트럭은 하나의 샤드에 지정되고 해당 샤드에 계속 머물게 되어
트럭 데이터는 각 샤드에 순서대로 정렬
하지만 새드마다 하나의 소비자가 필요하기 때문에 동시에 가질 수 있는 최대 소비자 개수는 5개 뿐
샤드가 5개인 경우에 초당 최대 5BM의 데이터를 수신할 수 있어 처리량이 꽤 많은 편
Kinesis Data Streams은 데이터 스트림을 샤드당 데이터를 정렬할 때 사용하면 좋은 모델 - SQS FIFO는 샤드 및 파티션을 정의할 필요 없이 SQS FIFO 대기열 하나만 있으면 되며
트럭이 100대 있으므로 각 트럭 ID에 상응하는 그룹 ID를 100개 생성하여 소비자도 최대 100개가 될 수 있음
SQS FIFO에서는 최대 초당 300, 혹은 배치를 사용하면 3000개의 메시지를 가짐
SQS FIFO는 그룹 ID 숫자에 따른 동적 소비자 수를 원할 때 사용하면 좋은 모델
'Cloud > AWS' 카테고리의 다른 글
[SAA] Amazon MQ (0) | 2022.04.08 |
---|---|
[SAA] SQS vs SNS vs Kinesis (0) | 2022.04.08 |
[SAA] Kinesis 개요 (0) | 2022.04.08 |
[SAA] SNS 및 SQS - 팬아웃 패턴 (0) | 2022.04.06 |
[SAA] Amazon SNS 개요 (0) | 2022.04.06 |