Amazon Simple Queue Service(Amazon SQS) 대기열의 메시지 백로그가 증가했고 이를 방지하고 싶습니다.
간략한 설명
표준 및 FIFO SQS 대기열
다음 상황에서는 메시지 백로그가 증가합니다.
- 생산자는 메시지가 소비되는 속도보다 빠른 속도로 메시지를 보냅니다.
- 소비자는 가시성 시간 초과 기간 내에 메시지를 삭제하지 않습니다. SQS 대기열이 폴링될 때 메시지가 대기열에 다시 나타납니다.
FIFO SQS 대기열
FIFO(선입선출) SQS 대기열의 경우 다음 중 하나로 인해 메시지 백로그가 증가할 수도 있습니다.
- FIFO 대기열의 메시지 버퍼 제한은 120,000개입니다.
- 메시지 그룹에 속한 메시지가 소비자에 고착되어 있어 동일한 메시지 그룹의 다른 메시지가 처리되지 못합니다.
해결 방법
다음 모범 사례를 따라 메시지 백로그 증가를 방지하십시오.
표준 및 FIFO SQS 대기열
- SQS 대기열 최적 가시성 제한 시간을 설정하여 소비자가 가시성 제한 시간 내에 메시지를 처리한 후 메시지를 삭제할 수 있도록 허용합니다. 메시지를 처리하는 데 걸리는 시간을 알지 못하는 경우 소비자 프로세스에 대한 하트비트를 생성합니다. 최초 가시성 제한 시간(예: 2분)을 지정합니다. 소비자가 메시지를 처리하는 데 더 많은 시간이 필요한 경우 ChangeMessageVisibility API 호출을 사용하여 가시성 제한 시간을 늘립니다.
- ReceiveMessage API를 호출할 때 배치 크기를 늘립니다. MaxNumberOfMessages 파라미터 값을 1보다 크고 최대 10까지의 값으로 설정합니다.
- SQS 대기열 지표 대략적인 가시 메시지 수를 모니터링합니다. 이 지표를 통해 생산자가 소비자가 메시지를 소비할 수 있는 속도보다 빠른 속도로 메시지를 생성하기 시작하는지 확인할 수 있습니다. 수평 확장을 위해 SQS 대기열을 소비하는 소비자 또는 클라이언트의 수를 늘리거나, 대기열을 폴링하는 스레드 수를 늘립니다.
FIFO SQS 대기열
120,000개 메시지 버퍼
FIFO 대기열은 최대 120,000개의 전송 중 메시지를 허용합니다. 전송 중 메시지에는 소비자가 대기열에서 수신했지만 아직 대기열에서 삭제하지 않은 메시지가 포함됩니다. 120,000개 할당량에 도달하면 Amazon SQS는 오류 메시지를 반환하지 않습니다.
FIFO 대기열은 처음 120,000개의 메시지를 검토하여 사용 가능한 메시지 그룹을 결정합니다. 단일 메시지 그룹에 메시지 백로그가 있는 경우 백로그의 메시지를 성공적으로 소비하기 전까지는 다른 메시지 그룹의 메시지를 소비할 수 없습니다.
메시지 그룹 스케일링
동일한 메시지 그룹에 속한 메시지는 메시지 그룹을 기준으로 순서대로 하나씩 처리됩니다. 그룹 ID가 여러 개인 메시지를 수신하면 Amazon SQS는 메시지 그룹 ID가 동일한 메시지를 최대한 많이 반환하려고 합니다. 이를 통해 다른 소비자가 메시지 그룹 ID가 다른 메시지를 처리할 수 있습니다.
특정 메시지 그룹 ID에 속하는 메시지가 보이지 않는 경우 다른 소비자가 메시지 그룹 ID가 동일한 메시지를 처리할 수 없습니다. 하지만 소비자는 다른 메시지 그룹의 메시지를 처리할 수 있습니다. 순서가 중요하지 않은 메시지 그룹의 수를 늘려 보십시오.