리눅스/kafka

멀티 노드 카프카 클러스터 (multi-node kafka cluster) 란? | 복제 | leader 및 follower | zookeeper란? | controller란?

정지홍 2024. 10. 30. 06:07

multi node kafka cluster?

  • 여러대의 서버(node)로 구성될 kafka cluster를 의미
  • 신뢰성 , 확장성 , 고가용성을 위해서 multi node 구조로 배포 
    • 신뢰성: 데이터의 복제를 통해서, 하나의 broker가 장애가 나더라도 다른 broker에서 data 사용 가능
    • 확장성: 노드를 추가하여 cluster 처리 용량을 유연하게 늘리는 것이 가능
    • 고가용성: leader-follower구조로, 특정 broker장애 발생해도 다른 broker가 자동으로 leader역할 수행 
  • kafka cluster 구조
    • kafka cluster는 broker , zookeeper , producer , consumer 등으로 구성됨
    • cluster에는 여러개의 broker가 있으며, 각 broker는 특정 partition에 속하는 data를 저장 및 관리 
      • multi node에는 이러한 broker들이 각기 다른 server에 위치해서 장애 발생시에도 정상 동작 가능
  • broker
    • cluster내 각 server에서 실행되며, data partition을 저장하고 client요청도 처리 
    • cluster 내에서 server를 실행하는 각 개별 노드 ( 프레미스에서는 pc 1대가 노드 1개 )
      • topic => 논리적으로 데이터를 분류하는 단위이며, 이를 여러조각으로 나눈게 partition이다.
        • 같은 topic내의 partition들의 내용은 중복된거는 없다.
      • partition이 3개의 복제본을 가지도록 설정했다면, 각 partition의 data가 3개의 broker(PC)에 중복 저장
  • partition
    • topic의 논리적 구분 단위이며, multi node에서는 partition을 여러 broker에 분산해 저장 
  • 복제 
    • 각 partition의 data를 복제본 형태로 여러 노드에 저장해서 신뢰성 보장
    • 카프카에서 가용성에 대한 핵심 기능이다.
    • kafka에서 각 partition들은 여러개의 복제본으로 구성됨. ( 크게 리더와 팔로워로 나뉨)
      • leader replica => partition의 모든 읽기,쓰기 요청을 처리하는 주요 복제본
      • follower replica => leader를 따라서 데이터를 복제. leader가 장애시 대신하기 위한 준비를 함.(지속적으로 동기화)
    • 복제는 leader에서 follower로만 이루어진다. ( follower가 leader의 partition을 읽어감 )
    • 복제본 간의 동기화 상태를 나타내는 2가지 개념 ISR , AR 존재
    • ISR( in sync replica)
      • leader와 동기화가 완료된 복제본으로 구성된 집함. 이는 leader와 동일한 data를 가지니, leader가 장애 발생시 ISR의 팔로워가 leader로 승격 될 수 있다.
      • ISR의 동기화 상태를 유지하는 것이 kafka의 데이터 안전성에 중요.
      • 복제본이 많아질수록 안전성이 높아지지만, 네트워크 비용이나 시스템 부하가 증가 될 수 있음
    • AR ( assigned replica )
      • 해당 파티션에 할당된 모든 복제본. 여기에는 leader와 follower의 복제본이 포함됨.
    • replication.factor 파티션의 복제본 개수를 지정
      • replication.factor가 3이면, 원본 partition , 복제 partition을 포함해서 모두 3개의 파티션을 가짐을 의미
      • replication.factor는 broker의 개수보다 클 수 없다.
    • acks옵션
      • acks=0 => client가 broker의 응답을 기다리지 않음. 데이터 손실 가능성이 크다.
      • acks=1 => leader 복제본 쓰기 성공시 응답이며, leader에만 기록이 남음.
      • acks=2 => 모든 ISR복제본에 쓰기가 완료될 때만 응답을 하며, 가장 안전하다.
    • 데이터 동기화 과정
      • follower replica는 leader의 log를 실시간으로 복제해서 data를 동기화 함.
        • 1. 로그복사 => follower는 leader의 data 변경사항을 받아와서 자신에게 기록.
        • 2. ISR유지 => leader는 follower가 data를 빠르게 동기화 못하면 해당 follower를 제거.
        • 3. 최소 ISR 요구사항 => min.insync.replicas로 최소 ISR수를 유지한다. 일정 갯수 이하면, 더이상 쓰기 허용x
    • 만약 leader가 장애가 나는 상황...
      • 1. kafka controller는 주기적으로 zookeeper로 leader의 상태를 확인한다.
      • 2. 만약 장애 감지시, ISR에 포함된 팔로워중 하나가 새 leader로 승격.( 주로 가장 빠르게 동기화 된 follower선택)
      • 3. data 요청 재전송 =>client는 새 leader replica에게 data를 소비 or 생산 한다.
  • zookeeper
    • cluster metadata를 관리하고, 리더 선출 등의 역할을 한다.
    • 즉, 중앙화된 metaData 관리 시스템이다. ( 분산 코디네이션 서비스 )
    • cluer 내의 node들이 일관된 상태를 유지하게 도우며, 장애 발생시 신속하게 복구 할 수 있게 함.
    • 주키퍼 서버
      • 분산 코디네이션을 위하여 여러 서버로 구성됨. 홀수 개로 구성해서 다수결 투표로 장애에 대응
    • ZNode
      • 주키퍼에 저장되는 데이터 단위
      • 노트 형태의 경로를 가지며, 트리 구조로 관리
      • 각 Znode는 data와 metaData를 포함한다
    • 주요기능
      • broker관리
      • metaData 저장
      • leader 선출
      • 설정관리 및 동기화
      • cluster 상태 모니터링
    • kafka와 zookeeper 간의 상호작용
      • broker등록 및 연결 정보 관리
      • partition leader 선출
        • 특정 partition의 leader가 다운되면, zookeeper가 ISR내의 follower중 하나를 새로운 leader로 선출
      • kafka broker들의 변경 사항을 실시간으로 감지함.
    • zookeeper의 한계
      • 복잡성 증가
      • 확장성 제약
      • 고가용성 관리의 부담
  • kafka controller broker
    • kafka cluster가 시작되면, 여러 broker중 하나가 controller 역할을 맡게 됨. 이는 zookeeper와 상호작용해서 선출.
    • cluster의 관리와 metaData 변경 사항을 담당하는 특별한 broker로, cluster 내 중앙 조정 역할을 수행
    • controller broker는 주로 zookeeper와 상화작용하며 broker,partition,leader 등 cluster의 전반적인 상태를 관리
    • controller broker는 모든 metadata변경 사항을 cluster내의 broker들에게 전파
    • 역할
      • partition leader 선출 및 관리
      • broker 상태 관리
      • partition 재배치와 replica 관리
      • metaData 변경 반영
    • 선출 과정
      • 1. cluster의 각 broker는 zookeeper에 controller로 선출되기 시도함
      • 2. 가장 먼저 요청한 broker가 controller로 선출 및 zookeeper는 이를 기록함.
      • 3. 선출된 broker는 zookeeper의 controller node에 정보를 기록하며, 역할을 수행
    • 만약 controller가 장애가 나면?
      • zookeeper가 이를 감지하고 다시 뽑는다.

 

 

 

 

 

 kafka-topics --bootstrap-server localhost:9092 --create --topic multi-broker-02 --partitions 3 --replication-factor 3