컨트롤러

테크·2023년 1월 10일
0

카프카(Kafka)

목록 보기
5/8

컨트롤러

카프카의 컨트롤러는 리더 선출 역할을 맡고 있습니다. 리더 브로커에 장애가 발생해서 새롭게 파티션의 리더를 선출해야 할 경우 카프카는 컨트롤러를 통해 장애가 난 파티션의 ISR 리스트 중에서 리더를 선출하여 리더 역할을 위임합니다.

리더를 선출하기 위해서 ISR 정보는 안전하게 저장되어야 하는데 카프카는 이 정보를 주키퍼에 위임하여 저장하고 있습니다.(3.3 이후부터는 주키퍼를 사용하지 않습니다.)

리더에 장애가 발생할경우 프로듀서와 컨슈머는 더이상 리더를 통해 메시지를 전송하고 수신하지 못하므로 정해진 숫자만큼 재시도를 수행하게 됩니다. 따라서 리더 선출 작업은 클라이언트가 재시도를 수행하는 시간 내에 빠르게 수행되어야 합니다.

장애 상황에서의 리더 선출 과정

새로운 파티션의 리더 선출 과정은 다음과 같습니다.

  1. 특정 파티션의 리더가 있는 브로커가 다운됩니다
  2. 주키퍼는 브로커와 연결이 끊어진 후, 해당 파티션의 ISR에서 변화가 생겼음을 감지합니다.
  3. 컨트롤러는 주키퍼 워치를 통해 특정 파티션에 변화가 생긴 것을 감지하고, 해당 파티션 ISR 중 새로운 리더를 선출합니다.
  4. 컨트롤러는 새롭게 선출된 파티션의 리더 정보를 주키퍼에 기록합니다.
  5. 이렇게 갱신된 정보는 현재 활성화 상태인 모든 브로커에게 전파됩니다.

제어된 상황에서의 리더 선출 과정

브로커가 장애가 아닌 관리자에 의해 자연스럽게 종료될 때의 리더 선출 과정은 다음과 같습니다.

  1. 관리자가 브로커 종료 명령어를 실행하고, SIG_TERM 신호가 브로커에게 전달됩니다.
  2. SIG_TERM 신호를 받은 브로커는 컨트롤러에게 알립니다.
  3. 컨트롤러는 리더 선출 작업을 진행하고, 해당 정보를 주키퍼에 기록합니다.
  4. 컨트롤러는 새로운 리더 정보를 다른 브로커에게 전송합니다.
  5. 컨트롤러는 종료 요청을 보낸 브로커에게 정상 종료한다는 응답을 보냅니다.
  6. 응답을 받은 브로커는 캐시에 있는 내용을 디스크에 저장하고 종료합니다.

제어된 종료로 새롭게 리더를 선출하면 종료된 리더에 있는 파티션들에 대해 하나하나 새롭게 리더를 선출합니다. 리더 선출 작업 중에 해당 파티션 외의 다른 파티션은 다운되지 않고 유지되므로 다운타임을 줄인 상태로 전체 작업을 수행할 수 있습니다.

만약 장애 상황으로 리더를 선출하게 될 경우 해당 브로커가 리더로 있는 모든 파티션에 대해 중단된 상태로 리더 선출 작업을 하나하나 수행해야 하기 때문에 다운타임이 제어된 종료에 비해 길어지게 됩니다.

실전 카프카 개발부터 운영까지 4장

profile
공부하는 개발자

0개의 댓글