Study/kafka

카프카 기본 개념

voider 2024. 6. 23. 23:51
  • Kafka

    • Apache Kafka 공식 페이지에서 "높은 성능의 데이터 파이프라인, 분석 스트리밍, 테이터 통합을 위해 사용하는 분산 이벤트 스트리밍 플랫폼이"라고 소개한다.
  • 분산 이벤트 스트리밍 플랫폼

    • 분산(Distributed)
      • 여러 서버에 걸쳐 분산된 아키텍처로 구성된 시스템을 의미한다.
    • 이벤트(Event)
      • 애플리케이션에서 발생하는 어떤 사건이나 상태 변화를 의미한다. 게시물 조회, 등록, 수정 같은 것들이 될 수 있다.
    • 스트리밍(Streaming)
      • 데이터가 지속적으로 생성되고, 이를 실시간으로 처리하고 소비할 수 있도록 설계된 방식이다.
    • 이벤트 스트리밍
      • 이벤트 스트리밍은 이벤트(또는 데이터)를 지속적으로 처리, 저장, 전달하는 기술이다.
  • Kafka를 구성하는 요소(들)

    • Kafka Cluster

      • 카프카 클러스터는 주키퍼, 브로커, 토픽, 파티션, 리플리케이션으로 구성된 논리적 개념이다.
               . +----------------+
                 | Kafka Cluster  |
          .      +----------------+
              .     /     |     \
                   /      |      \
                  /       |       \
      +-----------+ +-----------+ +-----------+
      |  Broker 1 | |  Broker 2 | |  Broker 3 |
      +-----------+ +-----------+ +-----------+
    • Zookeeper

      • 메타데이터 관리
        • 카프카 클러스터의 메타데이터(브로커, 토픽, 파티션 정보)를 관리한다.
      • 리더 선출
        • 각 파티션의 리더(leader) 브로커를 선출한다. 리더 브로커는 파티션의 모든 읽기/쓰기 요청을 처리한다.
      • 브로커 상태 관리
        • 브로커 상태를 모니터링 하고 브로커가 추가되거나 제거될 때 다른 브로커들에게 전파한다. 이것을 통해 클러스터의 동기화를 유지한다.
      • 카프카 최신 버전에서 주키퍼 의존성을 제거했음
        • 주키퍼를 유지 보수하는 것은 추가 비용이 든다. (서버, 운영) 카프카가 자체적으로 메타데이터를 관리할 수 있는 기능을 추가해서 이 비용을 없애려는 목적.
        • 카프카가 자체적으로 메타데이터를 관리하면 더 빨리 메타데이터를 조회하고 업데이트 할 수 있으므로 성능을 높일 수 있다.
        • 주키퍼는 클러스터 내 단일 장애 지점(Single Point of Failure)이다. 주키퍼 의존성을 제거해서 SPOF를 없앨 수 있다.
      • KRaft(Kafka Raft)
        • 카프카는 주키퍼를 대체하기 위해 KRaft를 도입.
        • KRaft는 카프카 브로커들이 직접 메타데이터를 관리하고 Raft consensus 알고리즘을 사용하여 메타데이터의 일관성을 유지.
    • Broker

      • 브로커는 메시지를 저장하고 관리하며 프로듀서와 컨슈머의 요청을 처리한다.
      • 여러 브로커가 모여 카프카 클러스터를 구성한다.
      • 데이터를 분산 저장하고 복제하여 높은 가용성과 내구성 보장한다.
        • 높은 가용성(HA, High availability)
          • 시스템이 최대한 오랫동안 중단없이 지속적으로 운영될 수 있는 능력
        • 내구성(Durability)
          • 데이터가 시스템에 한번 기록되면 시스템 장애나 오류가 발생해도 데이터가 손실되지 않고 안전하게 보관된다는 것을 보장하는 것을 의미.
      • 토픽과 파티션으로 나누어 데이터를 저장한다. 각 토픽은 여러 파티션으로 나뉘며, 파티션은 브로커에 분산 저장됨.
      • 파티션 내 데이터는 세그먼트라는 더 작은 단위로 나뉘어 저장됨
      • 브로커는 클러스터의 메타데이터를 관리하는 일도 함. 토픽, 파티션, 리더/팔로워 정보를 관리한다.
      • 주키퍼와 상호 작용. KRaft 방식을 사용한다면 브로커가 직접 메타데이터를 관리.
      • 클라이언트(컨슈머, 프로듀서) 요청 처리
      • Replication 및 leader - follower 기능
      • 데이터 압축 및 삭제(로그 세그먼트 압축, 삭제)
    • Producer

      • 데이터를 Kafka 클러스터의 특정 토픽으로 전송하는 클라이언트 애플리케이션. 데이터가 안정적으로 전송되었다는 것을 보장하기 위해 ACK를 설정할 수 있다.
    • Consumer

      • 컨슈머는 카프카 클러스터 특정 토픽에서 데이터를 읽어오는 클라이언트 애플리케이션이다.
      • 컨슈머는 구독하는 토픽을 폴링하여 데이터를 읽어온다.
      • 컨슈머는 하나의 컨슈머 그룹에 속한다.
      • 컨슈머는 데이터를 읽어온 위치를 오프셋으로 기록한다. 오프셋으로 데이터 중복 처리나 누락을 방지할 수 있다.
        • 오프셋은 __consumer_offsets라는 내부 토픽에 컨슈머 그룹 단위로 기록됨.
        • 컨슈머는 메시지를 읽고 나서 어디까지 읽었는지 오프셋을 커밋한다.
        • 브로커는 내부 토픽에 오프셋을 기록한다.
    • Consumer Group

      • 컨슈머 그룹은 컨슈머 인스턴스가 협력하여 하나의 토픽을 병렬로 소비할 수 있도록 하는 개념이다. 동일한 그룹 ID를 공유하는 컨슈머들로 구성된다.
      • 컨슈머 그룹 내 컨슈머는 할당된 파티션에서 데이터를 소비한다. 파티션 할당은 브로커가 한다.
      • 파티션 수보다 컨슈머 수가 많은 것은 의미없음.
             +-------------------+
             |   Consumer Group  |
             |     (my-group)    |
             +-------------------+
                /         |         \
               /          |          \
              /           |           \
      +------------+ +------------+ +------------+
      | Consumer 1 | | Consumer 2 | | Consumer 3 |
      +------------+ +------------+ +------------+
           |               |               |
      +---------+ +---------+ +---------+ +---------+ +---------+ 
      | Part 0  | | Part 1  | | Part 2  | | Part 3  | | Part 4  |
      +---------+ +---------+ +---------+ +---------+ +---------+ 
          |            |            |          |           |
        Kafka Cluster with Topic (my-topic) and 6 Partitions
    • Topic

      • 토픽은 메시지를 구분하는 논리적 단위다. 토픽은 카프카 클러스터에서 데이터가 저장되고 프로듀서, 컨슈머가 데이터를 주고받는 기본 단위다. 토픽은 여러 파티션으로 나뉘어져 있고, 각 파티션은 여러 브로커에 분산 저장된다.
    • Partition

      • 토픽은 여러 파티션으로 나뉘어진다. 파티션은 메시지를 순차 저장하고, 저장된 메시지는 고유한 오프셋을 가진다.
      • 파티션 내에서는 메시지의 순서를 보장하지만 여러 파티션에 걸쳐 메시지가 분산 저장되기 때문에 전체 메시지 순서는 보장할 수 없다.
    • Replication

      • 파티션 데이터의 내구성(durability)을 보장하기 위해 파티션은 여러 브로커에 복제된다. 각 파티션은 하나의 리더와 여러 팔로워 복제본을 가진다.
    Topic: my-topic
    +----------------+----------------+----------------+
    | Partition 0    | Partition 1    | Partition 2    |
    |                |                |                |
    | Msg 0, Msg 1,  | Msg 0, Msg 1,  | Msg 0, Msg 1,  |
    | Msg 2, Msg 3   | Msg 2, Msg 3   | Msg 2, Msg 3   |
    +----------------+----------------+----------------+

'Study > kafka' 카테고리의 다른 글

카프카 프로듀서, 컨슈머 기본 동작  (0) 2023.02.20
카프카 용어  (0) 2023.02.19
카프카 기본  (0) 2023.02.19