본문 바로가기
야미스터디/Backend

[Youtube] kafka 조금 아는 척 하기 1편 - 개발자용

by 의정부핵꿀밤 2024. 8. 21.
728x90

kafka란?

  • Apache Kafka
  • 고성능 분산 이벤트 스트리밍 플랫폼

 

 

kafka 기본 구조

kafka 기본 구조

  • 카프카 클러스터
    • 메시지(이벤트)가 저장되는 곳
    • 데이터가 이동하는데 필요한 핵심 역할을 수행한다
    • 여러 개의 브로커로 구성된다
    • 브로커는 일종의 서버로 생각하면 된다
    • 브로커가 메시지를 나눠서 저장하고, 이중화 처리, 장애 시 대체 등 다양한 역할을 한다
  • 주키퍼 클러스터
    • 카프카 클러스터 관련 정보가 기록된다
    • 이를 통해 카프카 클러스터가 관리된다

 

 

Topic & Partition

  • 토픽
    • 메시지를 구분하는 단위
    • 파일시스템의 폴더와 유사하다
    • 한 개의 토픽은 한 개 이상의 파티션으로 구성된다
  • 파티션
    • 메시지를 저장하는 물리적인 파일
  • 프로듀서는 메시지를 카프카에 저장할 때 어떤 토픽에 저장해야하는지 요청하고, 컨슈머는 어떤 토픽에서 메시지를 읽어올 지 결정한다
  • 즉, 프로듀서와 컨슈머는 토픽을 기준으로 메세지를 주고 받는다

 

 

파티션, 오프셋, 메시지 순서

  • 파티션은 기본적으로 추가만 가능한 append-only 파일이다
  • 각 메시지 저장 위치를 offset이라고 한다
  • 프로듀서가 메시지를 카프카에 저장하면 메시지들은 순서대로 오프셋 1, 오프셋 2,.. 등과 같이 오프셋 값을 갖는다
  • 또한 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가된다 (순서 보장)
  • 컨슈머는 오프셋 기준으로 메시지를 순서대로 읽는다
  • 메시지는 삭제되지 않는다 → 설정에 따라 일정 시간이 지난 뒤에 삭제, 컨슈머가 읽어갔는지 등은 상관 X

 

 

여러 파티션과 프로듀서

  • 프로듀서는 Round Robin 또는 key를 통해서 파티션을 선택한다
  • 같은 key를 갖는 메시지는 같은 파티션에 저장된다 → 같은 키에 대해서는 메시지 순서가 유지(보장)된다

 

  • 컨슈머는 컨슈머 그룹에 속한다
  • 1개의 파티션은 컨슈머 그룹 중 1개의 컨슈머만 연결이 가능하다
    • 즉, 컨슈머 그룹에 속한 컨슈머들은 1개의 파티션을 공유할 수 없다!
    • 1개의 컨슈머 그룹 기준으로 파티션의 메시지는 순서대로 처리된다! → 이를 통해서 파티션 별로 컨슈머그룹의 순서를 보장하는것임!!
    • 토픽이 아니고 파티션임!

 

 

성능

  • 카프카는 성능이 좋다고 함!
  • 파티션 파일은 OS가 제공하는 페이지 캐시를 사용한다
    • 파티션에 대한 파일 IO가 메모리에서 처리되어 속도가 빠르다
    • 서버에서 페이지캐시를 카프카만 사용해야 성능에 유리하다
  • Zero Copy를 사용한다
    • 디스크 버퍼에서 네트워크 버퍼로 직접 데이터를 복사하여 속도가 빠르다
  • 브로커가 컨슈머 추적을 위해 하는 일이 비교적 단순함
    • 보통의 메시징 시스템은 메시지 필터, 재전송 등의 일을 한다
    • 그러나 카프카는 메시지 필터, 재전송 등의 작업을 브로커가 하지 않는다 → 프로듀서/컨슈머가 직접 해야함
    • 브로커는 컨슈머와 파티션 간 매핑 관리만 수행한다
  • Batch 처리

    • producer: 일정 크기만큼 메시지를 모아서 전송 가능
    • consumer: 최소 크기만큼 메시지를 모아서 조회 가능
    • 낱개 처리를 하는 것보다 처리량이 증가한다!
  • 처리량(throughput) 증대(확장)가 쉬움

 

    • 1개 장비의 용량 한계가 발생하면 브로커 및 파티션을 추가하면 된다!
    • 컨슈머가 느리다 → 컨슈머 또는 파티션을 추가하면 된다!

 

 

리플리카 - 복제

  • 카프카는 장애 시 대처를 위해서 리플리카를 사용한다
  • 리플리카 → 파티션의 복제본
    • 복제 수(replication factor)만큼 파티션의 복제본이 각 브로커에 생긴다
  • 리더와 팔로워로 구성된다
    • 여러 리플리카 중 1개가 리더가 되고 나머지는 모두 팔로워가 된다
    • 프로듀서와 컨슈머는 리더를 통해서만 메시지를 처리한다
    • 나머지 팔로워는 리더로부터 데이터를 복제한다
  • 장애 대응
    • 리더가 속한 브로커 장애 시 다른 팔로워가 리더가 된다

 

 

 


https://www.youtube.com/watch?v=0Ssx7jJJADI&t=229s

 

728x90

댓글