목록 보기
장시간 비동기 작업, Kafka 대신 RDB 기반 Task Queue로 해결하기
백엔드

장시간 비동기 작업, Kafka 대신 RDB 기반 Task Queue로 해결하기

우아한 형제들
우아한 형제들
2025년 11월 25일

두줄요약

장시간 엑셀 생성 작업에서 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 제거로 디버깅과 운영 모니터링 단순화

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...