Posts Apache Kafka 1
Post
Cancel

Apache Kafka 1

Apache Kafka 1


💿 카프카의 탄생

아키텍쳐가 거대해지고 소스 애플리케이션과 타깃 App의 개수가 점점 많아지면서 서로를 연결하는 파이프라인의 개수가 많아 졌다. 그러ㅕ면서 소스코드 및 버전 관리에서 이슈가 생겼다 그리고 타깃 App에 장애가 상길 경우 그 영향이 소스 App에 그대로 전달되었다.

즉 파편화된 데이터 파이프라인은 치명적이었다. 링크드인 데이터 팀은 신규 시스템을 만들어 데이터 파이프라인의 복잡도를 낮추기로 했고 그렇게 개발된 카프카를 통해 여러 Web, App, Sensor등에서 취합한 데이터 스트림을 한 곳에서 실시간으로 관리할 수 있게 되었다.

즉 카프카는 기업의 대용량 데이터를 수집하고 이를 사용자들이 실시간 스트림으로 소비할 수 있게 만들어 주는 일종의 중추 신경으로 동작한다.

image


💿 특징

  • 중앙에 카프카를 배치함으로서 소스 과 타깃 App 사이의 의존도를 최소화하여 커플링을 완화
    • 즉 한 쪽의 이슈가 다른 한 쪽의 App에 영향(의존도)를 최소화
  • 카프카를 통해 전달할 수 있는 데이터 포맷은 사실상 제한이 없음
    • ByteArray로 통신하기 때문에 선언 가능한 모든 객체를 지원
    • 즉 기본적으로 ByteArray, ByteBuffer 등의 타입에 대한 직렬화 역직렬화 클래스가 제공

💿 역할

  • 서비스에서 발생하는 데이터를 데이터 레이크로 모음
  • 파편화되고 복잡도가 올라갈 때 데이터를 추출, 변경, 적재하는 과정을 묶은 데이터 파이프라인을 구축
  • 즉 데이터 파이프라인을 안정적이고 확장성 높게 운영하기 위한 방법

높은 처리량

카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송한다.

  • 네트워크 통신 횟수를 최소한으로 줄임(배치 처리)
    • 대용량 실시간 로그데이터를 처리
  • 여러 파티션에 분배하고 이를 병렬 처리할 수 있음
    • 동일 시간당 데이터 처리량을 늘리는 것

확장성

가번적인 환경에서 안정적으로 확장 가능

  • 브로커 개수를 자연스럽게(무중단 운영) 늘리거나 줄임(Scale-Out, Scale-In)

영속성

다른 메시징 플랫폼과 다르게 전송받은 데이터를 메모리에 저장하지 않고 파일 시스템에 저장

  • 페이지 캐시 영역을 메모리에 따로 생성하여 사용(파일 시스템의 속도 개선)

고가용성

클러스터로 이루어진 카프카는 데이터의 복제(replication)를 통해 고가용성 특징을 가짐

  • 서버를 직접 운영하는 온프레미스(on-premise) 환경의 서버 랙 또는 퍼블릭 클라우드(public cloud)의 리전 단위 장애에도 데이터를 안전하게 복제할 수 있는 브로커 옵션들이 있음

💿 데이터 레이크 아키텍쳐

레거시 아키텍쳐

  • 데이터를 배치로 모으는 구조는 유연하지 못했으며 실시간으로 생성되는 데이터들에 대한 인사이트 서비스 App에 빠르게 전달하지 못한다는 단점이 있음
  • 원천 데이터로부터 파생된 데이터의 히스토리를 파악하기가 어렵고 계속되는 데이터의 가공으로 인해 데이터가 파편화 되면서 데이터 거버넌스를 지키기가 어려워짐

람다 아키텍쳐

image

실시간 데이터 ETL 작업 영역을 정의한 아키텍쳐

  • 레이어 구조
    • 배치 레이어: 배치 데이터를 모아서 특정 시간, 타이밍 마다 일괄 처리
    • 서빙 레이어: 가공된 데이터를 데이터 사용자, 서비스 애플리케이션이 사용할 수 있도록 데이터가 저장된 공간
    • 스피드 레이어: 서비스에서 생성되는 원천 데이터를 실시간으로 분석
      • 분석된 데이터는 직접 사용할 수 있지만 필요하면 서빙 레이어로 데이터를 보내서 저장하고 사용 가능
      • 람다 아키텍처에서 카프카는 스피드 레이어에 위치한다.
  • 카프카 스트림즈와 같은 스트림 프로세싱 도구는 분석을 위한 다양한 기능을 제공
  • 하지만 레이어가 2개로 나뉘면서 분석 처리하는 로직이 2벌로 각각의 레이어에 따로 존재
  • 배치 데이터와 실시간 데이터를 융합하여 처리할 때는 다소 유연하지 못한 파이프라인을 생성

카파 아키텍쳐

람다와 유사하지만 배치 레이어를 제거하고 모든 데이터를 스피드 레이어에 넣어서 처리

  • 로직의 파편화, 디버깅, 배포, 운영 분리에 대한 이슈를 제거하여 더 효율 적임
    • 서비스에서 생성되는 모든 종류의 데이터를 스트림 처리해야함 ___

💿 용어 정리

데이터 파이프라인: 엔드 투 엔드 방식의 데이터 수집 및 적재를 개선하고 안정성을 추구하며, 유연하면서도 확장 가능하게 자동화 한 것

데이터 레이크: 필터링이나 패키지화되지 않은 데이터가 저장되는 곳

영속성: 프로그램이 종료되더라도 사라지지 않은 데이터의 특성

데이터 ETL: 기업이 전 세계 모든 곳의 수많은 팀에서 관리하는 구조화된 데이터와 구조화되지 않은 데이터를 비롯한 전체 데이터를 가져와 비즈니스 목적에 실질적으로 유용한 상태로 변환하는 엔드 투 엔드 프로세스를 의미합니다.

배치 데이터: 초, 분, 시간, 일 등으로 한정된 기간 단위 데이터. 일괄 처리한다는 것이 특징(신입생 목록, 제품 목록)

스트림 데이터: 시작 데이터와 끝데이터가 명확히 정해지지 않은 데이터.(클릭 로그, 주식 정보, 센서 데이터)

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