본문 바로가기

데이터엔지니어링

[데이터엔지니어링] Apache Kafka 개념 알아보기

Apache Kafka

Apache Kafka

  • 2011년, LinkedIn에서 개발 후 Apache 오픈소스로 공개
  • 데이터 파이프라인의 확장, 기종 간의 호환성, 고성능 기반의 스트림 데이터 처리의 문제 해결을 위해 개발
  • 실시간 스트리밍 데이터 수집, 처리하는 데 최적화된 분산 데이터 스토어

https://kafka.apache.org/

개발 배경

과거 링크드인 시스템 구성도

https://www.confluent.io/blog/event-streaming-platform-1/

  • 엔드투엔드(end-to-end) 연결 방식의 아키텍처
    • 데이터가 출발지에서 목적지까지 직접적으로 이동
  • 이러한 end-to-end 방식은 아키텍처가 거대해지고, 소스 어플리케이션과 타겟 어플리케이션을 연결하는 파이프라인의 개수가 많아지면서 문제가 발생.

Kafka 도입 후 링크드인 시스템 구성도

  • Pub/Sub 방식 : 중앙에 메시징 시스템 서버를 두고 Publisher(게시자)가 topic에 메시지를 보내면, 해당 topic을 구독해놓은 Subscriber(구독자) 모두에게 메시지가 전송되는 방식
  • Producer와 Consumer가 서로 분리되어 높은 확장성을 달성

주요 기능

  • Pub-Sub Model을 지원하는 분산 메시지 큐
    • 애플리케이션 데이터 또는 이벤트 스트림 게시 및 구독
  • 여러 대의 서버로 클러스터를 구성
  • 장애가 발생하더라도 안전한 방식으로 정확히 레코드 저장
  • 생성된 레코드 순차적으로 실시간 처리

장점

확장성

  • 파티셔닝된 로그 모델 사용 시, 데이터를 여러 서버에 분산할 수 있어 단일 서버에 담을 수 있는 수준 이상으로 데이터 확장 가능

신속함

  • 데이터 스트림을 분리해, 지연 시간이 매우 짧아 속도가 극도로 빠름

내구성

  • 파티션은 여러 서버에 분산되어 복제되며 데이터는 모두 디스크에 기록됨
  • 서버 장애로부터 데이터가 보호되어 내결함성과 내구성 높일 수 있음

Kafka 구성 요소

https://howtodoinjava.com/kafka/kafka-cluster-setup-using-docker-compose/

Producer

  • Kafka에 이벤트(메시지)를 발행하는 역할.

Consumer

  • Producer가 발행한 이벤트(메시지)를 구독해서 읽고 처리.

Kafka/Kafka Cluster

  • 하나 이상의 Broker 서버로 구성된 클러스터.

Broker

  • Kafka 애플리케이션이 설치되어 있는 서버 또는 노드
  • 여러 Topic을 갖고 있는 컨테이너로, 서버 내부에 이벤트(메시지)를 저장하고 관리하는 역할

Zookeeper

  • 카프카의 메타데이터 관리 및 브로커의 정상 상태 점검을 담당

Event

  • Kafka에서 Producer와 Consumer가 데이터를 주고 받는 단위

 

Topic, Partition, Offset

Topic

  • 이벤트(메시지) 구분 단위. (→ 쉽게 생각하면 Topic은 파일 시스템의 폴더, 이벤트는 해당 폴더의 파일)
  • 여러 개의 파티션으로 구성

Partition

  • 병렬 처리 및 고성능을 얻기 위해 하나의 Topic을 여러 개로 나눔
  • Topic을 생성하면 카프카가 자동적으로 Partition들을 Broker에 분배

Offset

  • 파티션 내에서 고유하고, 순서 정보를 가진 식별자.
  • Partition의 Event마다 할당된다.

출처

카프카(Kafka)란?, 메세지 큐 들여다 보기

Putting Apache Kafka To Use: A Practical Guide To Building an Event Streaming Platform (Part 1) | Confluent

왜 Kafka 인가?

Kafka Topics - javatpoint