[Infra] Kafka

최은창·2025년 9월 30일
post-thumbnail

00. 카프카란?

  • 아파치 SW 재단에서 개발한 오픈 소스 플랫폼
  • 데이터 스트림을 실시간 처리하고 저장하기 위해 고안되었다.
  • 많은 데이터를 효율적으로 처리하고 높은 처리량과 낮은 지연 시간을 제공하는 데 사용된다.
  • 대규모 파이프라인, 실시간 분석, 로그 수집 및 모니터링 시스템 등 다양한 용도로 사용된다.

01. 카프카 구성

  • Producer: 처리해야 할 이벤트를 생성한다.

  • Kafka Cluster: 처리해야 할 데이터를 쌓아두는 곳

    • 카프카는 처리해야 할 이벤트를 토픽 단위로 가지고 있다.
  • Consumer: 클러스터에서 하나씩 꺼내 순차적으로 데이터를 처리한다.

  • 토픽: 주제별로 이벤트를 모으는 단위,

    • 혹은 이벤트를 분류하는 단위
    • 한 개 이상의 파티션으로 분류
    • 토픽으로 분류되기 때문에 생산자와 소비자는 하나의 카프카 안에서 토픽을 가지고 각자의 관심사를 분리할 수 있다.

02. 작동 원리

  • 새로운 이벤트가 토픽으로 들어오면 뒤에 들어온 토픽이 append 형식으로 추가된다.
  • offset을 할당받게 되고 이 offset이 메시지를 식별할 수 있는 유니크한 값이 된다.
  • offset을 기준으로 이벤트는 Consumer에 의해 순차적으로 처리되게 된다.
  • 카프카는 토픽 단위로 파티션을 지원하기 한다.
  • Consumer가 발행한 이벤트는이벤트가 파티션이 여러 개일 경우 여러 개로 나뉘어 저장되고 Consumer도 파티션별로 따로 붙을 수 있어 병렬·분산 처리가 용이하다.

Producer

  • 카프카의 Producer는 데이터를 생성하고 Kafka Cluster에 전송하는 역할을 한다.
  • Producer는 데이터를 생성하고 Kafka Topic으로 데이터를 보내는 역할을 한다.
  • Producer는 데이터를 단일 Topic 혹은 여러 Topic에 보낼 수 있다. 또한 Topic 내 파티션에 분배한다.
  • 이를 통해 데이터의 병렬 처리와 분산 저장이 가능해진다.
  • 만약 토픽에 파티션이 여러 개 있다면 Producer가 여러 개일 경우 하나의 파티션을 기다릴 필요 없이 정해진 규칙에 따라 각각의 파티션에 저장하면 되기 때문에 데이터 처리 속도가 더 빨라진다.

Consumer

  • Consumer는 카프카의 Topic에서 데이터를 읽어오는 역할을 한다.
  • Consumer는 토픽 내에 하나 이상의 파티션에서 데이터를 소비하고 처리한다.
  • Consumer는 특정 토픽이나 파티션에서 데이터를 읽어오기 위해 Kafka Cluster에 연결된다.
  • Consumer는 읽어오는 데이터를 로직에 따라 처리하거나 다른 시스템으로 전달할 수 있다.
  • 또한 읽어온 데이터의 offset을 기록하여 자체적으로 읽은 데이터의 위치를 추적한다.
  • 이를 통해 Consumer는 중단된 지점부터 데이터를 다시 읽거나 특정 범위의 데이터만을 읽어올 수 있다.

Broker

  • Broker: 데이터의 저장과 전달을 관리, Producer로부터 전달된 데이터를 Topic에 저장하고 Consumer에게 필요한 데이터를 제공한다.
  • 실질적으로 데이터를 중간에서 관리하는 역할이 Broker이다.
  • Kafka Cluster여러 대Broker로 구성, 각 Broker는 데이터의 파티션을 관리하고 데이터의 복제와 장애 조치를 수행한다.
  • Broker는 데이터의 처리량과 안정성 확보를 위해 확장 가능한 방식으로 설계되어 있다.

ZooKeeper

  • 카프카의 ZooKeeper는 Kafka Cluster의 구성 정보와 상태를 관리하는 분산 형상 관리 도구이다.
  • ZooKeeper는 Kafka Cluster의 구성 Topic의 메타데이터, Broker의 상태, Consumer 그룹들을 추적하고 유지한다.
  • ZooKeeperBroker 간의 리더 선출, 동기화 이벤트 처리 등 분산 시스템 작업을 수행한다.
  • Broker의 추가 및 제거, Topic의 생성과 삭제와 같은 Kafka Cluster의 구성 변경을 관리한다.
  • ZooKeeper는 Kafka Cluster의 안정성과 일관성을 보장하는 역할을 수행한다.

03. 정리

  • Kafka ClusterZooKeeper + Broker를 말한다.
  • Broker는 데이터의 저장과 전달을 관리하는 실제 저장소 역할을 한다.
  • ZooKeeper는 클러스터의 구성 정보와 상태를 관리하는 관리자 역할을 한다.

🤔왜 카프카를 사용할까?

  • 데이터 영속성

    • 메시지 큐 시스템들과 비교하였을 때, 일반적인 메시지 큐 시스템들이 메모리 상에서 동작하여 시스템이 꺼지면 모든 메시지들이 유실되는 것과 달리 카프카는 디스크에 이벤트를 저장하기 때문에 문제가 생겨 시스템이 다운되더라도 복구가 가능하다.
  • 효과적인 대규모 트래픽 분산처리

    • 토픽 내에 파티션을 설정함으로써 대규모의 트래픽을 병렬적으로 분산처리할 수 있다.
    • 파티션을 줄이는 것은 어렵지만 늘리는 것은 쉽기 때문에 서비스가 빠르게 성장하는 경우 스케일업이 쉽다.
  • 안정성

    • 다른 분야의 분산 시스템들처럼 클러스터의 페일오버 리플리케이션이 가능하고 ZooKeeper가 클러스터의 관리를 해주기 때문에 안정적으로 운영할 수 있다.
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글