장시간 비동기 작업, Kafka 대신 RDB 기반 Task Queue로 해결하기
백엔드
장시간 비동기 작업, Kafka 대신 RDB 기반 Task Queue로 해결하기
두줄요약
장시간 엑셀 생성 작업에서 Kafka Consumer 타임아웃으로 중복 발송이 발생했습니다. RDB 기반 Task Queue와 Heartbeat로 재시도와 장애 복구를 안정화했습니다.
문제 상황
- 대용량 엑셀 생성 작업이 외부 API 호출 누적으로 30분 이상 소요되며 Kafka max.poll.interval.ms 초과
- 리밸런싱으로 동일 메시지가 재처리되어 같은 엑셀 파일이 중복 발송되는 운영 이슈 발생
원인 분석
- 장시간 작업과 Kafka Consumer poll 주기 제약의 충돌
- 타임아웃 상향 시 장애 감지 지연과 근본 해결 불가
- Kafka의 메시지 재할당 구조가 긴 작업 처리와 맞지 않는 상황
해결 방법
- 엑셀 생성 작업을 RDB에 상태와 Heartbeat를 가진 task로 저장하는 구조로 전환
- Worker가 PENDING 작업을 주기적으로 조회해 Redis 락으로 선점하고 병렬 처리
- Heartbeat 미갱신 작업은 Fallback 스케줄러가 감지해 PENDING으로 복구
성능/운영 포인트
- 재시도, 장애 복구, 중복 방지를 DB 상태 중심으로 단순화
- ShedLock으로 복구 스케줄러 중복 실행 방지
- Kafka 제거로 디버깅과 운영 모니터링 단순화
