피드로 돌아가기
리디에서 Kafka를 사용하는 법
리디 기술블로그리디 기술블로그
Backend

리디에서 Kafka를 사용하는 법

리디가 마이크로서비스 간 동기 API 호출을 Kafka 이벤트 스트리밍으로 전환해 응답속도 향상과 장애 독립성 확보

ridicorp2023년 1월 17일7intermediate

Context

2020년 이전 리디는 마이크로서비스 간 통합을 동기식 REST API 호출로 처리했다. 실시간 랭킹 시스템에서 감상 데이터 서비스가 실시간 랭킹 API를 직접 호출하는 방식은 응답속도 저하와 장애 전파 문제를 야기했다.

Technical Solution

  • 콘텐츠 감상 이벤트를 Kafka 토픽으로 수집: 감상 데이터 서비스가 'reading-books' 토픽에 메시지 게시, 실시간 랭킹 서비스가 해당 토픽 구독
  • CloudEvents 메시지 포맷 채택: 표준화된 이벤트 구조로 여러 서비스 간 호환성 확보
  • Node.js 기반 KafkaJS 컨슈머 구현: eachBatch 처리로 개별 메시지를 배치로 처리해 효율성 증대
  • 이벤트 버스 전담 조직 신설: R-Bus(RIDI Event Bus) 팀 출범으로 Kafka 기반 이벤트 아키텍처 관리
  • 다중 토픽 활용 확대: 감상 이벤트, 고객 행동 로그, 콘텐츠 상태 변화, 회원 가입, 댓글 등 다양한 이벤트 스트림화

Impact

최대 초당 수만 개의 메시지가 Kafka를 통해 처리 중이다.

Key Takeaway

이벤트 기반 아키텍처로 전환하면 서비스 간 느슨한 결합을 달성할 수 있으며, 단일 이벤트 토픽이 여러 컨슈머의 데이터 소스로 작동하면서 기존 시스템 영향 없이 새로운 분석·처리 서비스를 확장할 수 있다.


마이크로서비스 아키텍처를 운영하는 팀에서 동기 API 호출의 장애 전파를 경험하고 있다면, Kafka를 이벤트 버스로 도입해 pub/sub 패턴으로 전환하면 서비스 간 의존성을 제거하면서 배치 처리를 통해 처리 효율을 높일 수 있다.

원문 읽기