Server

[Kafka] Kafka, 토픽&파티션, 컨슈머에 대해 알아보기

개발자 쓔쓔 2023. 2. 14. 15:24
반응형

Kafka란?

  • 분산 이벤트 스트리밍 플랫폼
  • 고가용성으로 데이터를 손실없이 복구 가능
  • 낮은 지연과 높은 처리량으로 많은 데이터를 처리 가능

Kafka의 기본구조

  • Producer(프로듀서)
    • 카프카 클러스터로 메시지(이벤트) 전송
  • Kafka Cluster (카프카 클러스터)
    • 메시지(이벤트)를 저장 (저장하는 곳은 Topic)
    • 하나의 클러스터내에 여러개의 브로커(=서버)가 존재함.
    • 브로커내에 메시지를 나눠서 저장하며, 브로커를 통한 이중화 및 장애 대응
  • Zookeeper Cluster(주키퍼 클러스터, 주키퍼 앙상블)
    • 카프카 클러스터 관리
  • Consumer (컨슈머)
    • 메시지(이벤트)를 카프카 클러스터에서 읽음

Kafka Topic (토픽)

  • 다양한 데이터가 들어가는 공간
  • 데이터베이스의 테이블 혹은 파일시스템의 폴더와 유사한 성질
  • 토픽에 프로듀서가 데이터를 넣고, 컨슈머가 데이터를 가져감
  • 담는 데이터를 토픽명으로 정확하게 명시하면 추후 유지보수시 용이함
  • 한개의 토픽은 한개 이상의 파티션으로 구성 (파티션 : 메시지를 저장하는 물리적인 파일)

Kafka Partition (파티션)

  • 하나의 토픽은 여러개의 파티션으로 구성가능.
    • 여러개의 파티션인 경우 컨슈머 개수를 증가 시켜 데이터 처리를 분산 가능
    • 단, 파티션 증가는 가능하나, 축소는 되지 않기에 증가시 주의 필요.
  • 첫번째 파티션은 0번 부터 시작.
  • 파티션은 큐와 같이 내부의 데이터가 파티션 끝부터 순차적으로 쌓임.
  • 쌓인 데이터는 FIFO형태로 순서대로 컨슈머가 메시지를 가져감. 메시지가 들어오지 않으면 다른 메시지가 들어올때까지 기다림.
  • 컨슈머가 메시지를 가져가더라도 메시지는 삭제되지 않고, 추후 다른 컨슈머가 연결되었을때 다시 0번의 메시지부터 가져가서 사용 할 수 있음. 또한 offset을 통한 특정 위치 기준으로 순서대로 읽을 수도 있음. (단, 컨슈머 그룹이 상이해야하고, “auto.offset.rest = earliest”로 설정되어있어야함)
    • 메시지는 설정에 따라 삭제 될 수 있음 (log.retention.ms-시간 / log.retention.byte-크기)
  • 파티션이 여러개인 경우
    • 키가 null → “라운드 로빈”방식으로 할당
    • 키가 있고 → 키의 해시값을 구한 후, 같은 키의 파티션에 할당 (= 같은 키는 순서 유지)

Kafka Consumer (컨슈머)

  • 컨슈머가 메시지를 가져가도 메시지는 존재함.
  • 데이터 파이프라인으로 운영하는데 있어서의 핵심
  • 데이터는 Topic내의 파티션에 존재하며, 컨슈머는 파티션내의 데이터를 가져옮(=폴링)
  • 컨슈머는 컨슈머 그룹에 속함
    • 한개의 파티션은 컨슈머 그룹의 하나의 컨슈머만 연결 가능 (’가’파티션에 대하여, 컨슈머 그룹내 A,B에서 A만 연결 가능, B는 다른 파티션 연결 가능)
    • 한개의 컨슈머 그룹 기준으로 파티션의 메시지는 순서대로 처리됨 (연결된 파티션이 1개밖에 없기 때문)

 

 

출처 

- https://www.youtube.com/watch?v=7QfEpRTRdIQ 

- https://www.youtube.com/watch?v=0Ssx7jJJADI 

728x90
반응형