새소식

Data Engineering/Kafka

Kafka 기본 개념

  • -

Kafka 기본 개념

주요 기능

  • pub-sub model을 지원하며 분산 메세지 큐이다.
  • 기본 적으로 클러스터를 구성한다.
  • Topic을 중심으로 producer라고 하는 publisher, consumer(group)이라고 하는 subscriber로 데이터를 관리하고 처리한다.
  • 하나의 Topic은 복수 개의 partition으로 확장 가능하다.

Kafka 해결하는 문제

  • 단일 메세지 큐가 가지는 scale과 속도 문제를 해결한다.
  • 클러스터 구성으로 HA, Fault tolerance를 자체적으로 해결한다.
  • 대용량 분산 메세지 처리에서 메세지 저장과 처리의 신뢰를 관리할 수 있는 메커니즘을 구현했다.
  • 대용량 데이터를 다루면서도 빠른 데이터 처리가 가능하게 한다.

Kafka 서버 및 클라이언트

고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버와 클라이언트로 구성된 분산 시스템

서버: Kafka는 하나 이상의 서버로 구성된 클러스터, 서버 중 일부는 브로커라고 하는 스토리지 계층을 형성한다. 그 이외의 다른 서버는 Kafka Connect를 통해 데이터를 스트리밍하면서 Kafka를 다른 시스템과 통합한다.

클라이언트: Kafka 클라이언트를 사용하면 네트워크 또는 시스템 문제가 발생한 경우에도 고가용서을 보장하면서 이벤트 스트림을 병렬적으로 처리할 수 있는 분산 애플리케이션 및 마이크로서비스를 만들 수 있다.

주요 개념

  • 이벤트
    • 레코드 및 메세지 라고도 한다.
    • 카프카는 이벤트 형태로 데이터를 읽거나 쓴다.
    • 키, 값, 타임스탬프, 선택적 메타데이터 헤더로 구성되어있다.
  • producer & consumer
    • 모두 카프카 클라이언트이다.
    • 프로듀서는 이벤트를 발행, 컨슈머는 이벤트를 구독해서 읽고 처리한다.
    • 이 둘은 완전히 분리되어있으며, 이는 카프카가 높은 확장성을 달성할 수 있는 핵심 요인이다.

카프카 토픽

  • 토픽
    • 이벤트가 저장되는 공간이다.
    • 하나의 토픽에 여러 프로듀서가 이벤트를 발행할 수도, 여러 컨슈머가 하나의 토픽을 구독해서 이벤트를 읽을 수 있다.
    • 토픽의 이벤트는 필요한 만큼 여러 번 읽을 수 있다.
    • 토픽 별로 이벤트 유지기간 설정할 수 있다.
  • 파티션
    • 토픽은 여러 파티션으로 나뉜다.
    • 파티션이 실제 물리적인 하나의 큐이다.
    • 파티션에 저장되는 이벤트를 레코드라고 부르며 토픽을 생성할 때 파티션 수 지정 가능하다.
  • 오프셋(offset)
    • 파티션 내에서 고유한 순서 정보를 가진 식별자이다.
    • 변경 불가능하며 무한하게 증가한다.
    • 순서는 파티션 내에서만 보장되고 토픽 전체에서는 보장하지 않는다.

브로커

  • 카프카 클러스터는 하나 이상의 브로커 서버로 구성된다.
  • 여러 토픽을 갖고있는 컨테이너이다.
  • 하나의 브로커는 전체 카프카 데이터를 포함하고 있지는 않지만, 다른 모든 브로커가 가진 파티션 및 토픽에 대해서는 알고있다.

Kafka 클라이언트 API

  • Producer API - Producer Client를 만들고 싶을 때, 데이터를 write하는 가장 낮은 수준의 API
  • Consumer API - Consumer Client를 만들고 싶을 때, 데이터를 read하는 가장 낮은 수준의 API
  • Streams API - 입출력을 stream으로 처리하는 API, 더 추상화된 고수준의 API(sql 등) 제공
  • Connector API - 데이터 이동을 쉽게 할 수 있도록 제공하는 고수준의 API, consumer/producer 클라이언트를 만들지 않고도 쉽게 카프카와 외부 간의 데이터 스트리밍을 할 수 있도록 도움

'Data Engineering > Kafka' 카테고리의 다른 글

Kafka 배경 - Event Driven Architecture  (2) 2024.09.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.