본문 바로가기
카테고리 없음

Apache Kafka 알아보기

by 홍띠 2023. 7. 27.

Apache Kafka?

Kafka는 2011년 링크드인에서 실시간 데이터 피드를 관리하기 위해 개발한 이벤트 스트리밍 플랫폼이다.

Kafka는 고성능 분산 스트리밍 플랫폼으로, 분당 수십억개의 스트리밍 이벤트를 처리 할 수 있다.

카프카의 핵심 기능

  1. 애플리케이션에서 데이터 또는 이벤트 스트림을 게시(publish)하거나 구독(subscribe to)할 수 있음
  2. 원하는 기간 동안 스트림을 내구적이고 신뢰성 있게 저장 할 수 있음
  3. 데이터를 생성 즉시 실시간 처리 할 수 있으며, 순서를 보장함

카프카 구조

  1. 브로커 (Broker):
    • 카프카 클러스터의 핵심 구성 요소로, 메시지들을 저장하고 처리하는 노드
    • 여러 대의 브로커로 구성된 클러스터를 형성하여 데이터를 분산 저장하고 처리
  2. 토픽 (Topic):
    • 메시지들을 논리적으로 분류하는 단위
    • 토픽은 카프카에 저장되는 메시지들의 주제나 카테고리를 나타냄
  3. 파티션 (Partition):
    • 토픽의 물리적인 저장 단위로, 각 토픽은 여러개의 파티션으로 나누어짐
    • 파티션은 여러 브로커에 복제되어 저장됨
    • 파티션은 메시지의 순서를 보장하고, 병렬 처리가 가능하도록 해줌
  4. 프로듀서 (Producer):
    • 메시지를 생성하고 카프카에 특정 토픽으로 전송하는 역할
    • 프로듀서는 메시지를 전송할 때, 특정 파티션을 지정 가능. 지정하지 않고 라운드로빈 방식도 지원
  5. 컨슈머 (Consumer):
    • 카프카에서 메시지를 수신하여 처리하는 역할
    • 여러 개의 컨슈머 그룹으로 구성되며, 각 그룹은 특정 토픽의 파티션을 소비
  6. 컨슈머 그룹 (Consumer Group):
    • 하나 이상의 컨슈머로 구성되는 논리적 그룹
    • 같은 컨슈머 그룹에 속한 컨슈머들은 특정 토픽의 파티션을 분산하여 소비
  7. 주키퍼 (ZooKeeper):
    • 카프카 클러스터의 구성 정보와 상태 정보를 관리하는 분산 코디네이션 서비스
    • 주키퍼는 브로커들의 상태를 추적하고, 토픽과 파티션의 메타데이터를 저장하며, 리더 선출 등 카프카 클러스터의 관리 역할을 담당
    • Kafka에서는 Zookeeper에 대한 의존성을 제거하고자, Zookeeper 없이 카프카 내에서 메타데이터를 관리하는 KRaft 모드를 제공한다. (Production으로는 Kafka 3.3 version 이후 부터)
      https://developer.confluent.io/learn/kraft/

카프카 작동방식

아래의 4가지 API를 통해 Kafka 기능을 활용할 수 있음

  • Producer API(게시): 데이터 소스에서 데이터 이벤트 스트림을 하나 이상의 Kafka 토픽에 게시
  • Consumer API(소비): 어플리케이션에서 하나 이상의 토픽을 구독하고, 데이터를 가져와 결과 데이터 스트림을 처리. 실시간 데이터 뿐만 아니라 과거의 레코드를 구독하고 처리 할 수 있음
  • Streams API(처리): Producer와 Consumer API를 기반으로 복잡한 처리 기능을 추가. 토픽에서 데이터를 소비하고 분석, 집계, 변환 등의 처리과정을 거쳐 생성된 스트림을 동일한 토픽 혹은 다른 토픽으로 게시.
  • Connector API(연결): 재사용 가능한 생산자 또는 소비자 연결. 개발자가 커넥터를 빌드 할 수 있으며, BigQuery등 주요 서비스에 대한 수백 개의 기존 커넥터가 존재.

카프카 Use Case

  • Messaging: 카프카는 메세지 브로커로써, 높은 처리량, 내장된 파티셔닝, 복제 및 내결함성을 제공하여 대규모 메세지 처리 어플리케이션에 좋은 솔루션으로 사용됨
  • Website Activity Tracking: 카프카의 최초 use case. 사용자 활동 트래킹 파이프라인을 pub/sub 피드의 set으로 구축. 게시된 활동 피드는 실시간 처리, 실시간 모니터링, Hadoop 또는 데이터 웨어하우스에 적재 등의 유스케이스에 사용 됨
  • Metrics: 운영 모니터링에 사용. 분산된 응용 어플리케이션의 메트릭 정보를 중앙화함
  • Stream Processing: 입력 데이터 필터, 조인, 집계 또는 기타 변환 작업을 실시간으로 처리
  • 이 외에도, 로그 수집, 이벤트 소싱 등에 사용됨

Why Kafka?

  1. 높은 확장성: 카프카 클러스터를 수천 개의 브로커, 하루에 수조 개의 메시지, 페타바이트 규모의 데이터, 수십만 개의 파티션까지 확장 가능
  2. 높은 가용성: 카프카는 가용성 영역 내에서 효율적으로 클러스터를 확장하거나 지리적으로 분산된 지역에 걸쳐 클러스터를 연결하여 높은 가용성과 내결함성을 제공. 이로 인해 카프카는 데이터 손실의 위험 없이 안정적으로 운영 됨.
  3. 실시간 처리: 카프카는 높은 처리량과 낮은 지연 시간을 제공하여 실시간 데이터 처리를 지원. 대용량의 메세지를 분산처리를 통해 2ms와 같이 낮은 지연시간으로 처리.
  4. 높은 처리량: 카프카는 고속 및 대용량 데이터를 처리 가능 하며, 초당 수백만 개의 메시지를 처리.
  5. 영속성: 카프카는 데이터를 파일시스템에 저장하며, 페이지 캐시 영역을 사용하여 속도를 보완. 파일시스템에 저장되므로 시스템이 종료되더라도 데이터는 사라지지 않음.