yongyongMom 2024. 10. 22. 21:23
SMALL

1. 개요

1) 등장 배경

  • LinkedIn에서 2011년 파편화된 데이터 수집 및 분배 아키텍쳐를 운영하는 데 어려움을 겪음
  • 데이터를 생성하고 적재하기 위해서는 데이터를 생성하는 소스 애플리케이션과 데이터가 최종 적재되는 타켓 애플리케이션이 연결
  • 초기 운영을 할 때는 단방향 통신을 이용해서 소스 코드를 작성했는데 이 당시에는 아키텍처가 복잡하지 않았기 때문에 운영이 힘들지 않았지만 아키텍처가 점점 복잡해지고 소스 애플리케이션 과 타겟 애플리케이션의 개수가 늘어나면서 문제가 발생
  • 소스 애플리케이션 과 타겟 애플리케이션을 연결하는 파이프라인의 개수가 늘어나면서 소스 코드 및 버전 관리에서 이슈가 발생하기 시작했고 타겟 애플리케이션에 장애가 발생할 경우 그 영향이 소스 애플리케이션에 그대로 전달 - 강한 결합의 문제점
  • 초창기에는 다양한 메세지 플랫폼 과 ETL(Extract Transform Load) 툴을 적용해서 아키텍처를 변경하려고 노력을 했는데 파편화된 데이터 파이프라인의 복잡도는 낮추는 아키텍처를 만드는 데는 실패
  • LinkedIn의 데이터 팀은 새로운 시스템을 만들려고 했는데 그 결과물이 Apache Kafka

2) 해결책

  • 각각의 애플리케이션끼리 연결해서 데이터를 처리하는 것이 아니고 한 곳에 모아 중앙 집중화 방식으로 처리
  • 카프카를 이용해서 웹 사이트, 애플리케이션, 센서 등에서 취합한 데이터 스트림을 한 곳에 모아서 관리
  • 카프카는 대용량 데이터를 수집하고 이를 사용자들이 실시간 스트림으로 소비할 수 있게 만들어주는 애플리케이션 
  • 카프카를 중앙에 배치해서 소스 애플리케이션 과 타겟 애플리케이션 사의 의존도를 최소화 함
  • 소스 애플리케이션은 어느 타겟 애플리케이션으로 데이터를 보낼 것인지 고민하지 않고 카프카로 넣으면 되고 카프카 내부에 데이터가 저장되는 파티션은 FIFO(First In First Out)의 형태로 동작
  • 큐에 데이터를 보내는 동작은 프로듀서가 하고 큐에서 데이터를 가져가는 것은 컨슈머가 수행 

3) 데이터 포맷

  • 제한 없음
  • 자바에서 사용 가능한 모든 객체는 사용할 수 있는데 직렬화(객체 단위로 데이터를 전송할 수 있도록 해주는 것
  • Serializable 인터페이스나 Parceable 인터페이스를 구현한 객체) 와 역직렬화를 이용

4) 구성

  • 카프카는 상용환경에서 최소 3대 이상의 서버(Broker)로 운영
  • 3대 이상으로 구현을 하게 되면 클러스터 중 일부에 장애가 발생하더라도 데이터를 지속적으로 복제하기 때문에 안전하게 운영할 수 있습니다.

5) 현재

  • 카프카 소스 코드는 깃허브 저장소(https://github.com/apache/kafka)에 공개
  • KIP(Kafka Improvement Proposal)을 통해서 변경 사항을 제안하는 것이 가능

2. Kafka 의 역할

1) Big data

  • 다양한 종류의 많은 또는 빠르게 생성되는 데이터

2)Data Pipeline

  • Data Lake: 생성되는 데이터를 모두 모은 것
  • Data Warehouse: 필터링이나 패키지화가 된 데이터
  • Data Pipeline: Data Warehouse 와 다르게 필터링 되거나 패키지화 되지 않은 데이터가 저장되고 운영되는 서비스로부터 수집 가능한 모든 데이터를 모으는 것
    • 데이터 과학자는 모든 데이터를 가지고 서비스에 활용할 수 있는 비지니스 인사이트를 도출
  • 서비스에서 발생하는 데이터를 데이터 레이크로 모으려면 웹, 앱, 백엔드 서버, 데이터베이스에서 발생하는 데이터를 직접 End-To-End 방식으로 넣을 수 있음
  • 서비스하는 애플리케이션의 개수가 적고 트래픽이 많지 않을 때는 문제가 되지 않지만 서비스가 복잡해지게 되면 Extracting(추출), Transform(변경), Loading(적재) 하는 과정을 하나로 만드는 Data Pipeline을 구축해야 함
  • Data Pipeline의 동작은 자동화 되어야 합니다.
  • Data Pipeline을 구축할 때 Kafka 와 같은 Message Broker 와 Airflow(스케줄러) 같은 Tool을 많이 이용합니다.
    • Message Broker가 받은 데이터를 전처리 작업을 수행한 후 데이터 저장소에 저장

3) kafka 사용 이유

  • 높은 처리량: 데이터를 묶어서 전송할 수 있고 병렬 처리가 가능
  • 확장성이 좋음: 브로커의 개수를 조절
  • 영속성
    • 카프카는 데이터를 파일에 저장(카프카가 종료되었다 켜지더라도 데이터는 그대로 보존)
    • 속도는 Page Cache를 이용해서 보완
  • 고가용성
    • 여러 개의 서버로 운영이 되기 때문에 일부 서버에 장애가 발생해도 무중단으로 안전하고 지속적으로 데이터를 처리

3.Docker에 설치 (실습)

  1. docker-compose.yml 파일을 생성하고 작성
  2. 터미널에서 명령을 수행 - 클러스터 1개를 가진 카프카 서버를 실행
  3. 외부에서 사용할 수 있도록 설정 변경 -> 터미널에서 도커 컨테이너 안으로 접속 -> 설정 파일을 수정 - 내용을 추가
  4. 토픽 생성 과 조회 및 삭제
  5. 메세지 전송 및 받기

https://github.com/tpdms0159/Cloud_Study_Projects/tree/main/Kafka_docker

 

Cloud_Study_Projects/Kafka_docker at main · tpdms0159/Cloud_Study_Projects

cloud 공부하면서 진행하는 프로젝트 모음. Contribute to tpdms0159/Cloud_Study_Projects development by creating an account on GitHub.

github.com

 

반응형
LIST