이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
리더와 팔로워
-
리더는 모든 데이터의
-
Read / Write 요청을 처리 및 데이터를 저장한다.
-
팔로워는 리더를 주기적으로 체크하면서
-
없는 데이터를 리더로부터 받아와 리플리케이션을 유지한다.
정합성 문제
-
만약 팔로워에 문제가 있어
-
리더로부터 데이터를 가져오지 못한다면 어떻게 될까?
-
리더가 다운되는 경우
-
팔로워가 새로운 리더로 승격되어야한다.
-
그런데 데이터가 일치하지 않으면 큰 문제가 발생할 수 있다.
-
카프카에서는 이러한 현상을 방지하고자
-
ISR(In Sync Replica)라는 개념을 도입했다.
ISR
-
ISR은 현재 리플리케이션이 되고 있는 그룹을 뜻한다.
-
ISR에는 중요한 규칙이 있다.
-
ISR에 속해 있는 구성원만이 리더의 자격을 가질 수 있다.
-
예를 들어
-
peter 토픽의 리플리케이션 팩터 : 2
-
리더 : 1번 브로커
-
팔로워 : 2번 브로커
-
ISR 구성원 : 1,2번 브로커
-
이 상황에서 1번 브로커가 다운이 되면
-
ISR의 구성원인 2번 브로커가
-
새로운 리더로 승격할 수 있다.
-
즉 ISR이라는 그룹을 만들어
-
리플리케이션의 신뢰성을 높힌다.
Example
-
위 예제의 상황은 다음과 같다.
-
1개의 리더
-
2개의 팔로워
-
리플리케이션 팩터 : 3
-
리더와 팔로워 모두 ISR의 구성원
-
그림의 동작 Flow에 대해 알아보자.
-
프로듀서는 A메세지를 토픽의 리더에게 보낸다.
-
리더만 토픽을 Write를 한다. (리더의 조건)
-
팔로워들은 매우 짧은 주기로 리더와의 데이터를 동기화한다.
-
그런데 팔로워2가 동작하지 않는다.
-
리더는 팔로워들이 주기적으로 데이터를 확인하고 있는지를 체크하여
-
만약 설정된 일정 주기(replica.lag.time.max.ms)만큼
-
확인 요청이 오지 않는다면
-
리더는 해당 팔로워의 문제가 발생했음을 인지하고
-
해당 팔로워는 리더의 역할을 대신할 수 없다고 판단해
-
ISR 그룹에서 추방시킨다.
-
(= ISR 그룹에서의 리더 자격도 박탈당한다.)
-
ISR의 최종 구성원은
-
리더와 팔로워1이며
-
만약 이상황에서 리더가 다운된다면
-
ISR의 구성원인 팔로워1이 리더로 승격되고
-
프로듀서와 컨슈머들의 요청들을 이어서 처리한다.