In-Sync Replicas (ISR)
리더 장애시 리더를 선출하는데 사용하는 컴포넌트. HighWaterMark라고하는 지점까지 동일한 Replicas의 목록을 의미한다.
복제의 정확도와 지속성을 판단하는 지표라고 이해하면 된다.
리더는 가장 많은 양의 데이터를 가지고있고, 각각의 레플리카는 리더의 데이터를 따라가며 복사하게된다.
replica.lag.max.messages = 4라고 가정하자. Log-end-offset이 7이므로 4이상의 레플리카가 ISR이 된다.
- Broker101 #7 : Log-end-Offset
- Broker102 #5 : Fully-Replicated Committed (복제의 상태를 리더에게 알려주는 커밋)
- High Water Mark : #5
→ Broker102는 In-sync Follower라 불린다
→ Broker103은 Out-of-Sync-Follower(OSR)이라 불린다.
replica.lag.max.messages로 ISR판단 시 발생할 수 있는 문제점
- 메시지가 항상 일정한 비율로 카프카에 들어올 때, replica.lag.max.messages=5로 하면 5개 이상으로 지연되는 경우가 없으므로 ISR들이 정상 동작한다.
- 다만 메시지 유입량이 갑자기 늘어날 경우 레플리카 모두 OSR로 상태를 변경된다.
- 따라서 실제 팔로워들이 정상적으로 동작하고 잠시 지연되었을 뿐인데 위 옵션만으로 ISR을 구분하게 된다면 모든 레플리카가 OSR로 판단하게 되는 문제가 발생한다. 이때문에 운영중에 불필요한 에러가 발생할 수 있으며 불필요한 retry역시 유발될 수 있다.
→ 따라서 replica.lag.time.max.ms로 판단하자
- 팔로워가 리더로 fetch요청을 보내는 Interval을 체크