
Kurly에서 주문을 모니터링 하는 법
두줄요약
복잡한 Legacy 주문 조회를 Kafka·Elasticsearch·Kibana 기반 실시간 모니터링으로 이전했습니다. 비동기 전송의 flush, ack, 로그 ID를 통해 데이터 유실과 중복 문제를 보완했습니다.
문제 상황
- 주문량 증가 시 복잡한 조회 쿼리로 주문서 검색 지연·타임아웃 발생
- 7개 이상 테이블 조인, 다수의 서브쿼리, 집계·정렬 연산에 따른 높은 부하
- 파일 로깅 기반 적재의 디스크·권한·배포 오류 및 데이터 유실 가능성
구조와 흐름
- 주문 도메인 이벤트 발생 시 PHP 애플리케이션에서 Kafka로 주문 정보 전송
- Kafka 적재 데이터를 Elasticsearch로 전달하고 Kibana 대시보드에서 실시간·누적 통계 조회
- Producer·Broker·Consumer·Topic 기반의 발행/구독 구조 활용
해결 방법
- php-rdkafka 클라이언트로 주문 이벤트를 비동기 Producing
- 프로세스 종료 전
flush호출로 전송 완료 대기 및 유실 방지 - ack 옵션 추가와 로그 ID 지정으로 전송 확인·중복 데이터 대응
성능/운영 포인트
- Kibana 대시보드에서 주문 건수·금액·상품 통계를 약 1초 내 조회
- 이벤트 수집 누락 시 DB와 모니터링 데이터 간 정합성 차이 발생 가능성
- 대시보드 데이터 기반 인프라 장애 파악 및 Slack 인사이트 공유 가능성

