Skip to main content Link Search Menu Expand Document (external link) Copy Copied

Kafka 프로듀서와 컨슈머의 데이터 접근 설계 고민

문제 요약

소비자와 레스토랑의 연락처 데이터를 어디에서 가져올 것인가?에 대한 문제가 대두되었다.

  • 프로듀서(요청 서비스): Kafka 메시지를 보내기 전에 데이터를 조회한다.
  • 컨슈머(알림 서비스): Kafka 메시지를 처리할 때 데이터를 조회한다.

어제 정해진 요청 서비스에서 데이터를 요청해 가져오는 경우 데이터 불일치가 발생할 경우 알림이 누락되고, 사용자 경험이 저하될 가능성이 있다.


튜터님 피드백

데이터 불일치에 대한 인정 및 CS 처리

데이터 불일치를 인정하고 문제가 발생했을 경우, 고객센터(CS)를 통해 대응한다. 시스템 복잡도를 줄이면서 일정 수준의 서비스 품질을 유지할 수 있다.


Redis를 활용한 실시간 데이터 캐싱

알림 서비스를 소비할 때 최신 데이터를 조회한다. 대신 캐시를 활용하여 이메일 변경 사항을 즉시 반영하고, 알림 데이터의 정확도를 높인다.


Kafka 리트라이 로직 추가

전송 실패 시 메시지를 재전송하는 로직을 구현한다. 일시적인 네트워크 문제나 시스템 장애로 인한 메시지 누락을 방지할 수 있다.


Redis 키 관리 및 데이터 만료 설정

Redis 키와 만료 시간을 적절히 설정해 불필요한 데이터 축적을 방지한다. 최신 데이터만 유지하면서, 데이터 정확도를 더 높인다.


결정된 방식

유저 ID와 가게 ID를 기준으로 데이터를 관리하는 것으로 다수결로 결정되었다.


기술 구현 및 진행 상황

API 요청 설계

사용자와 가게 연락처를 조회하는 API를 OpenFeign을 이용해 구현했다.

  • 사용자 연락처: /api/v1/users/{userId}/contact
  • 가게 연락처: /api/v1/restaurants/{restaurantId}/contact

Kafka 메시지 소비 로직

메시지를 수신하는 기능과 서비스 로직과 연결하는 작업을 했다. 템플릿 ID 관리 방식 변경과 추가 데이터 로직은 내일 진행 예정이다.


트러블슈팅 기간 작업 목록

  • Kafka 설정 최적화
  • 템플릿 캐시 서버 적용
  • 리트라이 및 페일백 로직 추가
  • Config 서버 적용