ISR (In-Sync-Replicas)
리더 파티션과 팔로워 파티션이 모두 싱크가 된 상태를 뜻한다.
복제 개수가 2인 토픽을 가정해보자.
리터 파티션 1개와 팔로워 파티션 1개가 존재할 것이다.
리더 파티션에 0부터 3의 오프셋이 있다고 가정할때, 팔로워 파티션에 동기화가 완료되려면 0부터 3까지 오프셋이 존재해야한다.
동기화가 완료됐다는 의미는 리더 파티션의 모든 데이터가 팔로워 파티션에 복제된 상태를 말하기 때문이다.
리더 파티션과 팔로워 파티션이 동기화된 상태에서는 리더 또는 팔로워 파티션이 위치하는 브로커에 장애가 발생하더라도 데이터를 안전하게 사용할 수 있다.
팔로워 파티션이 리더 파티션으로부터 데이터를 복제하는 데에 시간이 걸린다. 프로듀서가 특정 파티션에 데이터를 저장하는 작업은 리더 파티션을 통해 처리하고, 이때 리퍼 파티션에 새로운 레코드가 추가되어 오프셋이 증가하면 팔로워 파티션이 위치한 브로커는 리더 파티션의 데이터를 복제한다. 리더 파티션에 데이터가 적제된 이후 팔로워 파티션이 복제하는 시간차 때문에 리더 파티션과 팔로워 파티션 간에 오프셋 차이가 발생한다.
replica.lag.time.max.ms
이런 차이를 모니터링하기 위해 리더 파티션은 replica.lag.time.max.ms 값 만큼의 주기를 가지고 팔로워 파티션이 데이터를 복제하는지 확인한다. 만약 팔로워 파티션이 replica.lag.time.max.ms 값보다 더 긴 시간동안 데이터를 가져가지 않는다면 해당 팔로워 파티션에 문제가 생긴것으로 판단하고 ISR 그룹에서 제외한다.
ISR로 묶인 리더 파티션과 팔로워 파티션은 파티션에 존재하는 데이터가 모두 동일하기 때문에 팔로워 파티션은 리더 파티션으로 새로 선출될 자격을 가진다. 반면, ISR로 묶이지 못한 팔로워 파티션은 리더로 선출될 자격이 없다.
unclean.leader.election.enable
일부 데이터 유실이 발생하더라도 서비스를 중단하지 않고 지속적으로 토픽을 사용하고 싶다면 ISR이 아닌 팔로워 파티션을 리더로 선출하도록 설정할 수 있다. 토픽별로 설정이 가능하다.
값 | 설명 | 설정 |
false | ISR이 아닌 팔로워 파티션을 리더 파티션으로 선출하지 않는다. 리더 파티션이 존재하는 브로커가 다시 시작되기까지 기다린다. 기다리는 동안, 토픽을 사용하는 서비스가 중단된다. 대신 동기화되지 않은 팔로워 파티션이 리더로 선출되지 않기 때문에 데이터의 유실은 발생하지 않는다. |
데이터가 유실되면 안되는 경우 |
true | ISR이 아닌 팔로워 파티션, 즉 동기화가 되지 않은 팔로워 파티션도 리더로 선출될 수 있다. 리더 파티션이 존재하는 브로커에서 장애가 발생하고 동기화되지 않은 팔로워 파티션이 리더로 선출되면 리더 파티션으로부터 동기화가 되지 않은 일부 데이터는 유실될 수 있다. 대신 서비스 중단은 없다. |
일부 데이터가 유실되더라도 토픽과 연동 중인 서비스의 무중단 운영이 더 중요할 경우 |
'Coding > Apache Kafka' 카테고리의 다른 글
[아파치 카프카 어플리케이션 프로그래밍] 17. 멱등성(idempotence) 프로듀서와 트랜잭션(transaction) 프로듀서 (1) | 2022.05.30 |
---|---|
[아파치 카프카 어플리케이션 프로그래밍] 16. 카프카 프로듀서 - acks 옵션 (0) | 2022.05.29 |
[아파치 카프카 어플리케이션 프로그래밍] 14. 토픽 정리 정책(cleanup.policy), 토픽 삭제 정책(delete policy), 토픽 압축 정책(compact policy) (0) | 2022.05.27 |
[아파치 카프카 어플리케이션 프로그래밍] 13. 토픽과 파티션 (0) | 2022.05.26 |
[아파치 카프카 어플리케이션 프로그래밍] 12. 카프카에서 제공하는 AdminClient 사용하여 정보 조회하기 (0) | 2022.05.24 |