
백엔드
Kafka와 ETL을 활용해 대용량 데이터 마이그레이션하기
두줄요약
대용량 이미지 데이터를 MySQL에서 MongoDB로 마이그레이션한 경험을 공유했습니다. Kafka, ETL, CDC를 조합해 동기화와 샤딩 최적화, 안정적 전환까지 진행했습니다.
문제 상황
- 통합 커머스 검색의 이미지 데이터가 26억 건 이상으로 커지며 MySQL 디스크 사용량이 90%를 초과
- 테이블 규모가 너무 커 스키마 변경 시 hang up 우려가 있고, 향후 대규모 이미지 유입도 예상
원인 분석
- 이미지 테이블과 참조 테이블의 급격한 증가로 저장소 압박 심화
- 다른 핵심 테이블과의 연관성, 트랜잭션, 스키마 제약 때문에 MySQL 확장에 한계
해결 방법
- ETL 데이터를 기준 스냅샷으로 삼고, 이후 변경분은 MySQL CDC로 반영하는 이중 동기화 파이프라인 구성
- Kafka 메시지 압축(lz4, linger.ms 3000, batch.size 16384)과 MongoDB 샤딩, 초기 청크 분할로 대용량 적재 최적화
- CDC 멱등성 확보를 위해 메시지 키 재정의, updatedDate 기반 최신성 판단, 재시도 로직과 W2 쓰기 고려 적용
성능/운영 포인트
- 샤드별 DML, write ticket, replication lag, CPU/메모리 지표를 지속 모니터링
- 시나리오 테스트, 성능 테스트, 베타/운영 순차 적용으로 안전성 검증
- 롤백 가능성을 고려해 MongoDB↔MySQL 양방향 동기화 구조 유지