카프카 핵심 가이드 1장

dev_314·2023년 7월 18일
0

Kafka - Trial and Error

목록 보기
2/3

카프카 핵심 가이드를 읽고 정리한 내용입니다.

Pub/Sub Pattern

  • Publisher가 생성한 데이터(메시지)를 직접 Subscriber에게 전달하지 않는다.
  • 대신 어떤 형태로든 메시지를 분류해서 보내고, 수신자는 메시지를 구독한다.
  • 대부분의 펍섭 시스템은 중간에 Broker가 존재한다.

Kafka

  • PubSub 기반 분산 커밋 로그 (분산 스트리밍 플랫폼)
    • 마치 RDBMS가 commit log를 사용해서 트랜잭션을 관리하는 것 처럼 작동
    1. 트랜잭션 기록을 보존 (durable)
    2. 시스템 상태를 일관성 있게 복구 가능 (consistency)
    3. 데이터 순서 보장 (deterministic)

  • 카프카의 기본 데이터 단위는 Message
    • 단순한 byte 배열 -> 특정한 형식, 의미가 없다
    • 메시지는 key라 불리는 메타 데이터를 포함할 수 있다.
      • 메시지를 저장할 Partition을 결정하기 위해 사용
      • 역시 단순히 바이트 배열
  • 카프카는 효율성을 위해 메시지를 Batch 단위로 저장
    • 단순히 같은 Topic의 파티션에 쓰여지는 메시지의 집합을 의미함
    • 메시지 쓸 때 마다 생기는 네트워크 비용을 줄이기 위해, 그냥 모아서 전달하는 것
      • latency, throughput 사이의 tradeoff발생

Topic, Partition

  • 메시지는 topic 단위로 분류된다.
  • 토픽은 여러 partition으로 나뉘어진다.
    • 토픽에 여러 파티션이 있는 경우, 토픽 안의 메시지 전체에 대해서는 순서 보장이 안 됨
      • 단일 파티션의 경우에만 (구조적으로) 가능
  • 파티션 개념을 통해 카프카는 데이터 중복, 확장성을 제공한다.
    • 각 파티션이 서로 다른 서버에 저장될 수 있다.
      • 하나의 토픽이, 하나의 서버의 용량을 넘어가는 성능을 제공할 수 있다.
    • 파티션은 복제 가능하다.
      • 서로 다른 서버들이 동일한 파티션의 복제본을 저장하고 있기 때문에, 한 서버에 장애가 발생해도 다른 서버에서 계속해서 읽고, 쓸 수 있다.

Producer, Consumer, Consumer Group

  • 카프카 클라이언트에 해당
    • 프로듀서, 컨슈머로 구분됨
  • 프로듀서
    • aka Publisher, Writer
    • 메시지 생성 주체
      • 메시지는 특정 토픽에 쓰여짐
    • 기본적으로 프로듀서는 토픽에 속한 파티션들 사이에 고르게 나눠서 메시지를 쓴다.
      • 특정 경우에는 partitioner를 통해 특정 파티션을 지정해서 메시지를 쓸 수도 있다.
  • 컨슈머
    • aka Subscriber, Reader
    • 메시지 소비 주체
      - 1개 이상의 토픽을 구독해서, 저장된 메시지를 각 파티션에 쓰여진 순서대로 읽음
    • offset을 기록함으로써, 어느 메시지까지 읽었는지 유지
      • 카프카가 메시지를 저장할 때, 각 메시지에 부여하는 메타데이터
      • 지속적으로 증가하는 정수값
      • 파티션의 각 메시지는 고유한 오프셋을 가지며, 앞서 저장된 메시지는 뒤에 오는 메시지보다 반드시 작은 값을 갖는다.
  • 컨슈머 그룹
    • 컨슈머는 Consumer Group의 일원으로서 작동
    • 하나 이상의 컨슈머로 구성
    • 컨슈머 그룹은 각 파티션이 하나의 컨슈머에 의해서만 읽히도록 한다
      • 컨슈머와 파티션의 대응 관계를 onwership이라고 한다.
    • 이를 통해
      • 컨슈머를 수평 확장 할 수 있다.
      • 한 컨슈머에 장애가 발생하더라도, 다른 컨슈머가 장애가 난 컨슈머가 읽고 있던 파티션을 재할당받은 뒤 이어서 데이터를 읽을 수 있다.

Broker, Cluster

  • 브로커
    • 하나의 카프카 서버를 Broker라고 부른다.
    • 프로듀셔로부터 메시지를 전달받아 오프셋을 할당한 뒤 디스크 저장소에 쓴다.
    • 컨슈머의 파티션 fetch 요청에 응답하여 메시지를 전달한다.
  • 클러스터
    • 브로커는 Cluster의 일부로 작동하도록 설계되었다.
    • 하나의 클러스터 안에 여러 개의 브로커가 포함될 수 있다.
      • 브로커 중 하나가 Cluster Controller 역할을 한다.
        • 작동중인 브로커 중 하나로 자동 선정된다.
        • 파티션을 브로커에 할당해주거나, 장애가 발생한 브로커를 모니터링하는 등의 작업을 수행
    • 파티션은 클러스터 안의 브로커 중 하나가 담당한다.
      • 그 브로커를 Partition Leader라고 부른다.
    • 복제된 파티션이 여러 브로커에 할당될 수도 있다.
      • 복제된 파티션을 가지고 있는 브로커들을 Follower라고 한다.

카프카의 Replication, Retention

  • Replication
    • 파티션의 메시지를 중복 저장함으로써, 리더 브로커에 장애가 발생할 경우 팔로워들 중 하나가 리더 역할을 이어 수행한다.
    • 모든 프로듀서는 리더 브로커에 메시지를 발행해야 하지만, 컨슈머는 리더, 팔로워 상관 없이 한 곳에서 데이터를 읽어올 수 있다.
  • Durability Retention
    • 브로커는 토픽에 대해 기본적인 보존 설정이 되어 있다.
      • 특정 기간 동안 메시지를 보존
      • 파티션이 특정 크기에 도달할 때 까지 데이터를 보존

Kafka의 특징

  1. 다중 프로듀서
  • 한 토픽에 대해 여러 프로듀서가 메시지를 생성할 수 있다.
  1. 다중 컨슈머
  • 여러 컨슈머가 상호 간섭 없이 어떠한 메시지도 읽을 수 있다.
  • 다른 메시지큐 서비스와 달리, 컨슈머 단위가 아닌 컨슈머 그룹 단위로 메시지가 소비된다.
  1. 디스크 기반 보존
  • 메시지를 지속성 있게 저장할 수 있다 -> 즉시 메시지를 읽지 않아도 보존된다.
  • 토픽별로 보존 정책을 지정할 수 있다.
  1. 확장성
  • 유연한 확장성 덕분에 어떠한 크기의 데이터도 처리할 수 있다.
  • 클러스터 작동 중에도 시스템 중단 없이 확장 가능하다 (availability)
profile
블로그 이전했습니다 https://dev314.tistory.com/

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

글 잘 봤습니다, 감사합니다.

답글 달기