ISR (In-sync Replicas)
ISR의 이해 (In-sync Replicas)
- follower들 중 leader가 될 수 있는 것은 ISR 내에 있는 follwer만 가능
- controller는 follower들이 leader가 될 수 있는 지 지속적으로 모니터링 수행
- ISR에 속하는 지 판단은 leader 브로커가 수행
- leader 파티션 메시지를 follower가 복제하지 못하고 뒤쳐질 경우 ISR에서 해당 follower는 제거되며 leader가 문제 생길 때 차기 leader가 될 수 없음
ISR 조건
1) broker가 zookeeper에 연결되어 있어야 함 (zookeeper.session.timeout.ms 이내에 heartbeat 전송)
2) replica.lag.time.max.ms 기간 이내에 leader의 메시지를 지속적으로 가져가야함
- leader 파티션이 있는 브로커는 follower들이 제대로 데이터를 가져가는지 모니터링 하면서 ISR 관리

- follower는 leader에게 fetch 요청을 수행. fetch 요청에는 follower가 다음에 읽을 메시지의 offset 번호를 포함
- leader는 follower가 요청한 offset 번호와 leader partition의 가장 최신 offset을 비교하여 follower가 얼마나 복제를 잘 수행하고 있는 지 판단
min.insync.replicas 이해
- 브로커의 설정 값으로 토픽 단위로 설정함
- producer가
acks=all로 성공적으로 메시지를 보낼 수 있는 최소한의 ISR 브로커 개수 의미

min.insync.replicas가 2이므로 broker#3이 shutdown 되어도 ack 정상 반환함- 만약 broker#2도 shutdown되면
NOT_ENOUGH_REPLICAS에러 반환- 에러는 producer에서만 발생하고 consumer는 정상적으로 데이터 가져옴
kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-topic --config min.insync.replicas=2