ksqlDB 실시간 Join으로 뉴스 추천 만들기
강병수 · 토스 · 토스 기술 블로그
소개
오늘은 ksqlDB의 강력한 Join 기능을 활용해서 토스증권의 다양한 로그를 실시간으로 조합하여 중요한 비즈니스 문제를 해결한 사례를 소개하려고 합니다.
AI 핵심 요약
토스증권은 MAB 뉴스 추천의 CTR을 갱신하려면 뉴스 노출·클릭 로그에 유저 클러스터 정보를 실시간으로 붙여야 했지만, 로그마다 MongoDB를 조회하면 초당 수만 건의 요청이 발생할 수 있었습니다. 이를 해결하기 위해 Debezium CDC로 MongoDB의 클러스터 데이터를 Kafka에 전달해 KTable로 만들고, 뉴스 활동 로그 KStream과 LEFT JOIN해 클러스터 번호가 포함된 결과를 생성했습니다. Join이 정확히 동작하도록 두 토픽의 파티션 수와 키를 맞추고, KStream에는 PARTITION BY, KTable에는 GROUP BY를 적용했습니다. 이 사례는 ksqlDB의 상태 저장과 실시간 Join을 활용하면 원본 서비스 데이터베이스의 부하를 피하면서 추천 시스템에 필요한 데이터를 빠르게 조합할 수 있음을 보여줍니다.
- ksqlDB의 KTable은 Kafka 토픽을 소비해 만든 로컬 상태 저장소이므로, 서비스 데이터베이스에 매 로그마다 조회를 보내지 않고도 실시간 Join에 활용할 수 있습니다.
- MongoDB 데이터를 KTable로 사용하려면 Debezium CDC로 초기 스냅샷과 변경 사항을 Kafka 토픽에 전달해야 합니다.
- Join 대상 토픽은 파티션 수를 맞추고, 같은 Join 키로 파티셔닝해야 누락 없이 결과를 얻을 수 있습니다.
- KStream은 PARTITION BY, KTable은 GROUP BY로 키를 재파티셔닝할 수 있으며, KTable의 키별 최신 값은 LATEST_BY_OFFSET으로 유지할 수 있습니다.
비슷한 학습 자료
고객은 절대 기다려주지 않는다: 빠른 데이터 서빙으로 고객 만족도를 수직 상승 시키는 법
이세찬 · 토스 기술 블로그
토스증권의 수 천개 실시간 데이터 파이프라인 운영방법 #2: MSA 환경 Observability 높이기
· 토스 기술 블로그
토스증권의 수천 개 실시간 데이터 파이프라인 운영방법 #1: Visualize Lineage
강병수 · 토스 기술 블로그
토스증권 Apache Kafka 데이터센터 이중화 구성 #2: 데이터 미러링
송지수 · 토스 기술 블로그
ksqlDB를 활용한 증권사의 실시간 데이터 처리하기
강병수 · 토스 기술 블로그
Kafka Connect로 DB 데이터 쉽게 연동하기
김소라 · 컬리 기술 블로그