TIL

4.2 컨트롤러

예기치 못한 브로커 장애 시 리더 선출

토픽 peter-test02
리플리케이션 팩터 수 2
브로커 배치 1, 3번 브로커
현재 리더 위치 1번 브로커
graph LR
    리더["1 리더(브로커)"]
    팔로워["팔로워"]
    주키퍼["주키퍼"]
    컨트롤러["컨트롤러"]

    리더 <--2--> 주키퍼
    팔로워 <--> 주키퍼
    컨트롤러 --5--> 팔로워
    컨트롤러 <--3--> 주키퍼
    컨트롤러 --4--> 주키퍼

  1. 파티션 0번 리더가 있는 브로커 1번이 예기치 않게 다운
  2. 주키퍼는 1번 브로커와 연결이 끊어진 후 0번 파티션의 ISR의 변화를 감지
  3. 컨트롤러는 주키퍼 워치를 통해 0번 파티션에 변화를 감지하고 ISR 중 3번을 새로운 리더로 선출
  4. 컨트롤러는 0번 파티션의 리더가 3이라는 정보를 주키퍼에 기록
  5. 이렇게 갱신된 정보는 현재 활성화된 모든 브로커에 전파

제어된 종료

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