
백엔드
NATS JetStream 장애 분석
두줄요약
NATS JetStream Durable Consumer가 비정상 종료 이후 메시지를 소비하지 못한 장애를 분석했습니다. Consumer 상태값으로 원인을 식별하고, 재생성 및 초기화 스크립트로 복구했습니다.
문제 상황
- MSA 환경에서 선박 센서·이벤트 데이터를 전달하는 NATS JetStream의 Durable Consumer가 서버 강제 종료 이후 메시지를 소비하지 못하는 장애
- 재부팅 후에도 기존 Consumer 상태를 재사용하면서 Ack Pending 누적, Pull 요청 부재, 전달·Ack 진행 정체가 발생
원인 분석
- Outstanding Acks가 MaxAckPending에 도달해 신규 메시지 전달이 제한되는 상태
- Pull Consumer의 fetch/consume 요청이 발생하지 않아 Waiting Pulls가 0인 상태
- Last Delivered와 Ack Floor가 장시간 진행되지 않아 소비 흐름이 멈춘 상태
해결 방법
- Consumer 상태값으로 장애 지점 식별 후 Ack Pending, Pull 루프, 재전송 여부 점검
- 기존 Durable Consumer 삭제 후 애플리케이션 재기동으로 새로운 Consumer 재생성
- 서버 재시작 시 Consumer 초기화를 포함한 복구 스크립트 구성
