[Kafka] ISR

ISR

ISR은 현재 리플리케이션되고 있는 리플리케이션 그룹이다. 리더에 장애가 생겼을 시 ISR의 그룹 팔로워들 중에 하나를 선출하여 리더로 승격시킨다. 즉 ISR에 속해 있는 구성원만이 리더의 자격을 가진다. 리더와 팔로워간 데이터 동기화 작업을 중요하게 여기는 카프카에서 ISR을 통해 리플리케이션의 신뢰성을 높힌다.

동작원리

  • Replication.factor = 3
  1. 프로듀서가 리더에게 메세지를 보낸다
  2. 리더는 메세지를 받고 저장한다
  3. 팔로워들은 매우 짧은 주기로 리더에 새로운 메세지가 없는지 확인하고 가져온다
  4. 리더는 팔로워들이 주기적으로 데이터를 가져가고 있는지(replica.lag.time.max.ms)를 확인한다
  5. 요청이 오지 않는다면 해당 팔로워를 ISR에서 추방한다

모든 브로커가 다운되었을 시

모든 브로커가 다운되었을 시 경우에 따라서 메세지의 손실이 있을 수 있다. 모든 브로커가 다운되었을 때 복구할 수 있는 시나리오는 두 가지가 있다.

  1. 마지막 리더가 살아나기를 기다린다
  2. ISR에서 추방되었지만 먼저 살아나면 자동으로 리더가 된다

1번의 경우에는 메세지 손실이 일어나지 않지만 반드시 마지막 리더가 살아나야한다라는 제한이 생긴다. 마지막 리더가 살아나지 않는다면 그만큼 서버의 장애 시간이 길어지게 된다.

2번의 경우에는 메세지 손실이 발생하게 된다. ISR에서 추방되어 리플리케이션을 진행하지 못하고 장애상태에 빠져버린 브로커가 먼저 살아나게 되어 리더가 된다면 장애상태에 있던 기간동안 받은 메세지가 새로운 리더의 토픽에 존재하지 않기 때문에 해당 메세지는 유실이 되게 된다. 그리도 살아나게 된 마지막 리더 마저도 새로운 리더를 리플리케이션 하기 때문에 메세지는 사라지게 된다.

위와 같은 두 시나리오는 unclean.leader.election.enable 설정을 통해 지정할 수 있다. true는 마지막 리더가 살아나기를 기다리는 방법이고 false는 먼저 살아나는 브로커가 리더가 되는 방법이다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/13/kafka/ISR/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.