Skip to content
This repository has been archived by the owner on May 1, 2023. It is now read-only.

Kafka가 어떻게 작동하는가?

ByeongChan PARK edited this page Feb 24, 2022 · 1 revision

Kafka란?

  • MOM ( Message Oriented Middleware, 메시지 지향 미들웨어 )
  • 독립된 애플리케이션 간에 데이터를 주고받을 수 있도록 하는 시스템 디자인
  • 함수 호출, 공유메모리 등의 방식이 아닌, 메시지 교환을 이용하는 중간 계층에 대한 인프라 아키텍쳐 개념
  • 분산 컴퓨팅이 가능해지며, 서비스간의 결합성이 낮아짐
  • 비동기로 메시지를 전달하는 것이 특징
  • Queue, Broadcast, Multicast 등의 방식으로 메시지 전달
  • Pub/Sub 구조
  • 메시지를 발행하는 Publisher(Producer), 메시지를 소비하는 Subscribe(Consumer)로 구성

image

Zookeeper ( Apache Zookeeper )

  • 본래 Zookeeper의 용도는 클러스터 최신 설정정보 관리, 동기화, 리더 채택 등 클러스터의 서버들이 공유하는 데이터를 관리하기 위해 사용됨.
  • 클러스터를 관리하는 Zookeeper 없이는 Kafka 구동이 불가능.
  • Kafka 서버를 가동하려면 Zookeeper를 먼저 가동해줘야 됨.

Broker

  • Kafka Server를 의미.
  • 한 클러스터 내에서 Kafka server를 여러 대 띄울수 있음.

Topic

  • 메시지가 생산되고 소비되는 주제.
  • 주제에 따라 여러 topic을 생성 가능.

Partition

  • Topic 내에서 메시지가 분산되어 저장되는 단위.
  • 한 Topic에 Partition이 3개 있다면, 3개의 Partition에 대해서 메시지가 분산되어 저장됨.
  • 이 때 Queue 방식으로 저장되므로 Partition의 끄트머리에 저장이 되어 Partition 내에서는 순서를 보장해주지만, Partition끼리는 메시지 순서를 보장하지 않음.
  • 그래서 Topic 내에 하나의 Partition이 존재할 때와 여러 개의 Partition이 존재할 때는 차이점이 있음.

Log

  • Partition의 한 칸이 Log.
  • Lkey, value, timestamp로 구성.

Offset

-Partition의 각 메시지를 식별할 수 있는 유니크한 값.

  • 메시지를 소비하는 Consumer가 읽을 차례를 의미하므로 Partition마다 별도로 관리됨.
  • 0부터 시작하여 1씩 증가함.

image

Producer

  • Producer는 정해진 Topic으로 메시지를 기록.
  • Partition이 여러 개 있을 경우, 기록 될 Partition의 선택은 기본적으로 Round-Robin 방식.
  • 각 Partition 내에서는 가장 마지막 offset 뒤에 신규 메시지가 저장되므로, Partition 내에서는 순서가 보장되며 기록됨.

Consumer Group

  • Consumer Group은 하나의 Topic을 담당.
  • 즉, Topic은 여러 개의 Consumer Group이 접근할 수 있지만, 하나의 Consumer Group은 하나의 Topic에만 접근할 수 있음.

Partition 접근하는 Consumer 관리

  • Consumer Group 내에서 Consumer 인스턴스들은 Topic내에 Partition에서 다음에 소비할 offset이 어디인지 공유하면서 메시지를 소비함.
  • 그렇기 때문에 다음에 소비할 offset을 잘 관리할 수 있음.
  • Consumer Group을 통해 하나의 Partition에는 하나의 Consumer 인스턴스만 접근할 수 있도록 관리함.

offset을 공유하여 고가용성을 확보

  • Partition에는 하나의 Consumer 인스턴스만 접근할 수 있기 때문에, 특정 Consumer 인스턴스에 에러가 발생했을 시 다른 Consumer 인스턴스는 에러가 발생한 Consumer 인스턴스가 소비하던 Partition을 소비함.
  • Consumer가 다운될 때를 대비해 Consumer Group의 Consumer 인스턴스들은 offset을 공유하고 있으며, 이를 통해 고가용성을 확보.
Clone this wiki locally