카프카의 컨트롤러는 리더 선출 역할을 맡고 있습니다. 리더 브로커에 장애가 발생해서 새롭게 파티션의 리더를 선출해야 할 경우 카프카는 컨트롤러를 통해 장애가 난 파티션의 ISR 리스트 중에서 리더를 선출하여 리더 역할을 위임합니다.
리더를 선출하기 위해서 ISR 정보는 안전하게 저장되어야 하는데 카프카는 이 정보를 주키퍼에 위임하여 저장하고 있습니다.(3.3 이후부터는 주키퍼를 사용하지 않습니다.)
리더에 장애가 발생할경우 프로듀서와 컨슈머는 더이상 리더를 통해 메시지를 전송하고 수신하지 못하므로 정해진 숫자만큼 재시도를 수행하게 됩니다. 따라서 리더 선출 작업은 클라이언트가 재시도를 수행하는 시간 내에 빠르게 수행되어야 합니다.
새로운 파티션의 리더 선출 과정은 다음과 같습니다.
브로커가 장애가 아닌 관리자에 의해 자연스럽게 종료될 때의 리더 선출 과정은 다음과 같습니다.
제어된 종료로 새롭게 리더를 선출하면 종료된 리더에 있는 파티션들에 대해 하나하나 새롭게 리더를 선출합니다. 리더 선출 작업 중에 해당 파티션 외의 다른 파티션은 다운되지 않고 유지되므로 다운타임을 줄인 상태로 전체 작업을 수행할 수 있습니다.
만약 장애 상황으로 리더를 선출하게 될 경우 해당 브로커가 리더로 있는 모든 파티션에 대해 중단된 상태로 리더 선출 작업을 하나하나 수행해야 하기 때문에 다운타임이 제어된 종료에 비해 길어지게 됩니다.
실전 카프카 개발부터 운영까지 4장