ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Data Engineer] Kafka란 무엇인가
    Data Engineer 2023. 5. 7. 23:33
    728x90

    Apache Kafka는 빠르고 확장 가능한 작업을 위해 데이터 피드의 분산 스트리밍, 파이프 라이닝 및 재생을 위한 실시간 스트리밍 데이터를 처리하기 위한 목적으로 설계된 오픈 소스 분산형 게시 - 구독 메시징 플랫폼이다. 당연한 얘기지만 Hadoop Ecosystem의 일부로 Kafka 공식 문서에도 설명하고 있다.

    Kafka는 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션이다. Kafka 서버는 여러 데이터 센터에 분산되어 있을 수 있으며 여러 서버 인스턴스에 걸쳐 레코드 스트림을 토픽으로 저장하여 데이터 지속성을 제공할 수 있다. 이 때 토픽은 레코드 혹은 메시지를 key , value 및 timestamp로 구성된 일련의 튜플, 즉 변경 불가능한 Python 객체 시퀀스로 저장한다.

     

    Kafka Cluster

     

    Kafka는 오늘날 시장에서 가장 빠르게 성장하는 오픈 소스 메시징 솔루션 중 하나이다. 이는 주로 분산 시스템에 우수한 로깅 메커니즘을 제공하는 아키텍처 기반 설계 패턴 때문이다.

    Message System

    : 하나 이상의 Data Src로부터 데이터를 받는 Application 상 서로 다른 프로그램끼리 정보를 교환하기 위한 통합 채널

    이해를 돕기 위해 그림으로 그려보았다.

    Server를 처음 고안했을 당시, FrontEnd 파트와 BackEnd 파트는 App Metric을 거쳐 Metric UI Server를 이루는 구조를 고안하였다. 그러나 실제 서비스 제공 당시, 두번째 도식처럼 발행자(Front, Back, DB, Chat)가 구독자(Metric UI, Metric Analysis, State Monitoring)와 직접 연결하여 상호작용을 하게 되는 구조는 결국 어디서 정확하게 문제가 일어났는지 알 수가 없었다. 왜냐하면 한 곳에 대한 반영이 다른 곳에도 영향을 주게 되어, 변화가 생길 때마다 예측이 불가능하고 대응하기 어렵기 때문이다.

    이러한 문제를 해결하기 위해, 중개자 역할을 하는 Message System을 고안하여 발행자와 구독자 간 직접 연결을 피하면서 정확한 변화 원인을 식별하게 만들었다. 세 번째 도식과 같은 구조는 발행자가 구독자의 정보를 알 필요가 없고, 발행자/구독자 정보를 포함시킴으로써 구독자는 원하는 메시지만 읽을수가 있다. 또한 발행자를 추가하더라도 발행자는 Sub/Pub Server만 알면 되고 그 외 정보는 필요가 없게 되어 복잡도 문제도 개선할 수 있었다. 이는 두 번째 도식과 같은 레거시 시스템과 달리 기존 서버 변경 및 서버 추가가 수월해져 수평적 확장도 가능하게 만드는 계기가 되었다.

    개인적으로, 개념은 다르지만 TCP와 UDP 구조의 차이를 떠올리며 이해하면 수월할 것 같다.

    이러한 Application Message System 은 다음과 같은 특징을 가진다.

    - 느슨한 경계

    : 어느 쪽에서 변경사항이 생기더라도 다른 프로그램에서 영향을 받지 않아, 상호 간 의존성을 최소화한다. (데이터 파이프라인에서 가장 중요한 부분 중 하나인 독립성을 어느정도 보장할 수 있다)

    - 공용 인터페이스 정의

    : App 간 데이터 교환을 위해 공용으로 규정된 데이터 형식 보장. 이 또한 

    - 응답 속도 

    : 메시징 시스템 내 응답 속도는 메시지 전송 및 수신에 소요되는 시간을 의미하게 되며, 심각한 지연은 메시지 손실을 야기할 수도 있다.

    - 신뢰성

    : 일시적 가용성 문제가 발생하더라도 정보 교환 관련 App에 영향을 미치지 아니한다. 이는 Disk 기반 보존에 있는데, Kafka Producer에 의해 저장된 메시지는 디스크에 의해 보존되며, 이 같은 하드웨어 기반 보존은 Consumer가 메시지 처리가 느리거나 접속 폭주로 인한 Reading 실패에도 강해지기 때문이다. 그래서 따로 Message를 백업할 필요도 없고, Consumer가 동작하지 않을 시에도 메시지는 Kafka에 보존된다. 또한 Consumer가 동작 도중 중단 후 다시 실행되더라도 중단 시점부터 메시지를 처리할 수 있어 Message 유실 위험도 낮아지게 된다.

    - 확장성

    - 고성능

    : 내부적으로 분산 처리/ 배치 처리가 가능하다.

    Apache Kafka의 사용 사례

    - 서로 다른 구성 요소 간의 안정적인 데이터 교환

    - 애플리케이션 요구 사항 변경에 따라 메시징 워크로드를 분할하는 기능

    - 데이터 처리를 위한 실시간 스트리밍

    - 데이터/메시지 재생에 대한 기본 지원

    Apache Kafka의 주요 개념

    • Topic
      • Pub/Sub Message System에서 상당히 보편적인 개념
      • 지정된 Data Stream에 대한 관심을 표시하는 데 사용되는 주소를 추상화하여 지정이 가능하게끔 한다.
      • 애플리케이션에서 주어진 데이터 스트림에 대한 관심을 표시하는 데사용하는 추상화 계층
    • Partition
      • Topic을 세분화하는 일련의 순서 대기열
      • 연속적으로 추가되어 순차적 커밋 로그 형성
      • Kafka 시스템에서 각 레코드/메시지에는 지정된 Partition의 메시지 또는 레코드를 식별하는 데 사용되는 Offset이라는 순차 ID가 할당
    • Eternity
      • Record/Message가 게시될 때 지속적으로 유지하는 Server Cluster를 유지, 관리하여 작동
      • 구성 가능한 보존 시간 제한을 사용하여 소비에 관계없이 주어진 레코드가 지속되는 기간을 결정
      • Record/Message가 보존 시간 제한 내에 있는 동안 Record/Message를 사용할 수 있으며, Record/Message가 이 보존 시간 제한을 초과하면 삭제되고 공간이 확보
    • Topic/Partition Expansion
      • Apache Kafka는 Server Cluster로 작동
      • 주어진 Topic/Partition에서 각 Setver에 부하를 공유하여 확장 가능
      • 이를 통해 Kafka Cluster 내 각 Server는 주어진 토픽/파티션에 대한 Record/Message의 배포 및 영속성 처리 가능
      • 파티션 : 파티션 리더로 선택된 한 개의 Server(데이터의 모든 배포 및 영속성 처리)와 팔로워 역할을 하는 모든 Server들(내결함성 및 고가용성을 위한 데이터 복제 역할)로 분할
    • Producer
      • 주어진 Record/Message가 게시되어야 하는 Topic 정의
      • Partition : 추가 확장성을 제공하는 데 사요외므로 주어진 Record/Message가 게시되는 파티션도 정의 가능
      • Partition을 정의하지 않고 Topic Partition에서 순차 순환 대기 방식의 로드 밸런싱 달성이 가능
    • Consumer
      • Record/Message를 처리하는 Entity
      • 개별 워크로드에서 독립적으로 작업하거나 지정 워크로드에서 다른 Consumer와 협력하여 작업하도록 구성 가능
      • Consumer Group 이름에 기반하여 단일 프로세스 내 혹은 여러 프로세스, 또는 여러 시스템에 Consumer 분산 가능
      • Consumer 집합 전체에서 Record/Message 소비를 로드 밸런싱.

     

    Apache Kafka의 비즈니스 이점

    - 데이터 분배 및 이용을 위한 Pub/Sub Message 모델 제공

    - 오랜 시간에 걸쳐 액세스하고 재생할 수 있는 데이터의 장기 저장 허용

    - 실시간 스트림 처리를 위해 실시간 데이터 액세스 기능 지원

    728x90

    'Data Engineer' 카테고리의 다른 글

    [Kafka] Producer와 Consumer  (0) 2023.05.16
    [Kafka] 정리_01  (0) 2023.05.14
    SaaS, Software as a Service  (0) 2023.04.02
    [Data Pipeline 실습] 1. 데이터 생성  (0) 2023.03.30
    OLTP와 OLAP, 그리고 Data Warehouse  (0) 2023.03.16
Designed by Tistory.