빅데이터(BigData)/Spark

spark structured streaming + kafka를 이용한 개발 후기

leebaro 2021. 8. 12.
728x90

최근에 진행했던 프로젝트에서 structured streaming + kafka를 사용한 경험을 공유하려고 한다.

 

현황

현재 운영하고 있는 추천 시스템에서는 고객의 최근 행동(상품 조회, 구매)에 따라서 추천 상품 랭킹이 개인화된다. 예를들어 오늘 키보드를 구매했다면, 추천 상품중 키보드 카테고리의 상품의 스코어를 낮춰서 추천 페이지의 아래쪽에서 보이도록 하고, 오늘 키보드를 조회하고 아직 구매하지 않았다면 현재 키보드에 관심이 있다고 판단해서 추천 상품 중 키보드 카테고리의 상품을 추천 페이지의 상단에 노출 시킨다.

이 때 최근에 방문했던 상품에 대한 로그 데이터는 현재 시간 기준으로 2~3시간 전의 것을 사용하고 있다. 그래서 추천 상품에 대한 최신성(recency)를 높여주고 싶어했다.

 

요구사항

현재 2~3시간 이전 로그 데이터를 사용하고 있는 것을 실시간 데이터를 이용해서 추천 상품 랭킹 스코어에 적용하자.

 

수행내용

비즈니스 관점

1. kafka에서 고객 행동 로그를 수집하기

2. 고객 행동 로그에서 상품 상세 조회 이력만 필터링 하기

3. 고객 별 상품 상세 페이지 조회 이력으로 현재 가장 많이 방문한 카테고리를 찾기

4. 고객 별 가장 많이 방문한 카테고리의 추천 상품을 랭킹 스코어를 높이기

 

기술 관점

1. spark structured streaming + kafka 연동 테스트 

2. 유저 로그 topic 데이터 확인

3. 비즈니스 관점의 수행 내용에 맞는 로직 적용하기

4. airflow 배치 만들기

5. 장애 대응 방안 수립하기

 

 

위의 수행 내용들을 진행하면서 여러가지 문제들을 경험했다. 그 내용들은 다음에 다시 정리해보겠다.

 

문제점

1. spark에 kafka 관련 jar 등록하기

2. spark 실행시 --packages 옵션을 이용하기 위한 proxy 이용방법

3. structured streaming에서 window 함수 이용 방법

4. spark 프로세스가 특정 주기로 종료되는 상황

5. jar에 등록된 udf를 spark 실행후 추가 및 사용하는 방법

 

 

728x90