Post

검색과 추천 - (사이드 플젝) 태스크 설정 - 인덱싱 인프라 구축

사이드 프로젝트: 제품 검색 인덱스 인프라 구축

프로젝트 개요

이번 사이드 프로젝트에서는 Amazon Berkeley Objects (ABO) 데이터셋을 사용하여 강력한 제품 검색 인덱스 인프라를 구축할 예정입니다. 주요 초점은 대규모 데이터 인덱싱 처리와 배치 인덱싱 및 실시간 업데이트를 위한 효율적인 파이프라인 생성에 있습니다.

데이터셋

Amazon Berkeley Objects (ABO) 데이터셋abo-listings.tar 파일을 사용할 것입니다. 이 파일에는 제품 리스팅과 메타데이터가 포함되어 있습니다.

핵심 요구사항

  1. 제품 listing 전체를 Elasticsearch에 인덱스
    • abo-listings 데이터를 활용하여 Elasticsearch에 제품 정보를 인덱싱.
    • 대규모 데이터셋을 효율적으로 처리하기 위해 Spark를 사용하여 데이터를 전처리 후 인덱싱.
  2. 제품 인덱스의 item_keywordsproduct_description를 업데이트할 수 있는 API 제공
    • Kafka를 통해 업데이트 이벤트를 수신하고, 이를 처리하여 Elasticsearch의 제품 정보를 동기화.
    • Spark 또는 Flink를 사용하여 업데이트된 정보를 효율적으로 반영.
  3. item_keywordsproduct_description 정보로 제품 검색
    • 사용자가 입력한 키워드와 제품 설명을 기반으로 Elasticsearch에서 최적화된 검색을 수행.
    • 다양한 필터와 정렬 옵션을 제공하여 사용자 경험을 향상.

주요 기술

  • Apache Kafka
  • Apache Spark
  • Elasticsearch

인프라 파이프라인

이 프로젝트는 두 가지 주요 파이프라인 구축에 중점을 둡니다:

1. 배치 인덱스 파이프라인

이 파이프라인은 데이터셋의 초기 대량 인덱싱을 처리합니다:

Batch Index Pipeline

  • 데이터 소스: ABO_listing.json
  • 과정: Preprocessing > Spark 기반 Indexer > Elasticsearch
  • 설명: 대규모 제품 listing 데이터를 전처리한 후, Spark를 활용하여 데이터를 병렬 처리하고, Elasticsearch에 인덱싱합니다.

2. 인덱스 업데이트 파이프라인

이 파이프라인은 제품 인덱스의 실시간 업데이트를 관리합니다:

Index Update Pipeline

  • 데이터 소스: 업데이트 이벤트 (e.g., item_keywords, product_description 변경)
  • 과정: Kafka > Spark/Flink 기반 Updater > Elasticsearch
  • 설명: Kafka를 통해 실시간으로 들어오는 업데이트 요청을 Spark 또는 Flink로 처리하여, 기존 인덱스 데이터를 최신 상태로 유지합니다.

프로젝트 목표

이 프로젝트의 주요 목적은 대규모 데이터셋을 처리할 수 있는 인덱싱 인프라를 구축하는 것입니다. 배치 및 실시간 업데이트 파이프라인을 모두 구현함으로써, 단순한 API 기반 인덱싱을 넘어서는 포괄적인 시스템을 만들 것입니다.

이러한 접근 방식을 통해 다음과 같은 이점을 얻을 수 있습니다:

  1. 대용량의 초기 데이터를 효율적으로 처리하고 인덱싱
  2. 실시간 업데이트를 처리하여 검색 인덱스를 최신 상태로 유지
  3. 분산 시스템 및 데이터 처리 기술에 대한 실질적인 경험 획득

이 제품 검색 인덱스 인프라 구축의 구현 세부사항과 도전 과제들에 대해 앞으로 업데이트해 나가겠습니다.

This post is licensed under CC BY 4.0 by the author.