Community

Dataflow로 컬리의 준실시간 수요 예측모델 파이프라인 구축하기(1)

최근 들어 데이터파이프라인 관련 니즈와 사례들이 많아지는거 같습니다. 사실 저도 데이터 파이프라인은 해보질 않아서 잘 모르는데, 아래 글을 읽고나서 좀 더 많이 이해할 수 있게 되었습니다. 다음글은 컬리 데이터플랫폼팀에서 ML Engineer로 일하고 있는 한수진님이 Apache Beam 모델 기반의 구글 Dataflow 서비스를 통해 컬리의 준실시간 수요 예측 시스템의 파이프라인을 구축한 경험기입니다. 이번의 내용은 Dataflow 도입 배경 및 서비스 전반에 대한 개념과 배포 과정이라고 하니, 다음편도 기대하면 좋을거 같죠? ^^ 🔔 어떤 파이프라인이 필요했나? 🚩 준실시간 수요예측 모델 서빙 시시각각으로 변하는 고객의 주문 데이터가 예측에 상당한 영향을 주는만큼 실시간 데이터를 모델에 빠르게 반영하는것이 중요 🚩 BigQuery 데이터 기반의 파이프라인 고객의 주문 데이터는 스트리밍으로 AWS MSK(Kafka)에 수집된 후 BigQuery로 적재. Kafka는 최신 스트리밍 데이터만 담고 있는 반면 BigQuery는 모든 과거 데이터를 담고 있음 🔔 Dataflow 2015년 구글에서 공개한 대용량 분산처리 시스템을 배치와 스트리밍 프로세싱으로 구현하는 완전관리형(fully-managed) 클라우드 서비스 🚩 Dataflow의 프로그래밍 모델, Apache Beam 👉 Apache Beam은 2016년 공개된 배치와 스트리밍 파이프라인을 모두 처리할 수 있는 프로그래밍 모델로 Beam = Batch+Streaming 👉 현재 Java, Python, Go 세가지 언어로 지원하며, 런타임 엔진은 Apache Flink, Apache Spark, Google Cloud Dataflow 등이 있음 🚩 Dataflow가 Beam 모델을 실행하는 방식 👉 준비 단계(Queued state): 환경 설정(worker, docker image, library 등), 리소스 권한 및 유효성 검사, Beam 객체 메서드 변환(serialize) 👉 실행 단계(Running state): GCE에 worker VM이 생성, 파이프라인 객체 메소드에서 선언된 코드를 실행 🚩 Dataflow 파이프라인 유형 👉 배치 파이프라인: 지정한 일정에 맞춰 새로운 작업이 생성되고 종료되는 것을 반복 👉 스트리밍 파이프라인: 한번 생성된 작업은 계속 실행되며 작업 환경 스펙은 한번만 설정 🚩 Dataflow 템플릿 👉 Flex 템플릿: 반복적으로 파이프라인을 설계하고 Dataflow에 배포해야한다면 그때마다 개발 환경이나 파이프라인 종속 항목 설치가 필요할텐데 Dataflow 템플릿을 사용하면 이런 번거로움을 줄일 수 있는데, 직접 개발한 파이프라인을 커스텀 템플릿으로 등록해서 사용하는 경우를 Flex 템플릿이라고 함. 👉 파이프라인을 패키징한 도커 이미지(in Artifact Registry)와 해당 이미지를 참조하여 프로젝트를 실행시키겠다고 정의하는 템플릿 스펙 파일(in GCS bucket)만 템플릿으로 등록해주면 GCP 콘솔, CLI, REST API 등 다양한 채널에서 Dataflow 작업 가능 🚩 Dataflow CI/CD 👉 GitHub Actions로 템플릿 빌드에서부터 Dataflow 배포까지의 CI/CD workflow를 작성 🚩 Dataflow 설정에 유용한 팁 👉 스트리밍 파이프라인에서는 streaming engine을 쓰자 👉 파이프라인 코드의 main session에서 정의된 global imports, variables, functions를 사용하기 위해서 save_main_session=True를 지정해주자 👉 Dataflow에 올바른 권한 설정을 위해서 worker service account 외에, Dataflow service agent도 적절한 역할을 가지고 있어야 한다 보다 상세 내용은 해당 링크를 참고해주시기 바랍니다~ ^^

알림

알림이 없습니다