Open LOG-INFO opened 2 years ago
Broker가 죽는다면 새로운 Replication이 다른 브로커로 복제되는건가?
의 대답이 바로 나왔다.하나의 토픽의 파티션들은 레플리케이션에서 리더와 팔로워로 존재하게 된다.
리더와 팔로워는 ISR(In Sync Replica)라는 것으로 묶이게 되고, 이 그룹에 속한 팔로워만이 리더가 될 수 있다.
리더는 그룹 내에 존재하는 팔로워들의 데이터를 일치시키고 유지하기 위해 지속적으로 리더의 데이터를 따라가게 된다.
즉, 리더에 뒤쳐지지 않고 잘 따라잡고 있는 팔로워만이 ISR 그룹에 속하게 된다.
리더는 특정 주기의 시간만큼 복제 요청을 하지 않는 팔로워를 ISR 그룹에서 추방한다.
ISR 그룹 내에서는 모든 팔로워의 복제가 완료되었을 때 리더는 내부적으로 커밋되었다는 표시를 하게 된다.
마지막 커밋 오프셋 위치는 하이워터마크 라고 부른다. (High Water Mark)
복제가 되기 전 커밋이 되어버리면 리더가 바뀌고난 뒤에 컨슈머가 컨슈밍한 메시지가 다른 이슈가 생길 수 있다.
그래서 복제에서는 복제가 완료된 뒤에야 비로소 커밋이 되게 된다.
server.properties
의 log.cleanup.policy
를 delete
명시 (기본값)retention.ms
를 통해 로그 세그먼트를 가지고 있을 시간을 결정합니다. (기본값 7일)
retention.ms
를 0으로 줄인다고 해도 바로 삭제되는 것이 아님로그 세그먼트 컴팩션이 진행된 후
__consumer_offset
토픽이 있음__consumer_offset
토픽에 메시지로 저장함__consumer_offset
로그 세그먼트 컴팩션할 때, 모든 메시지(레코드)를 저장하는 것이 아닌 가장 마지막 데이터만 추려서 저장함
메모
replication-factor
controlled.shutdown.enable
log.cleanup.policy
가delete(default)
여야 함retention.ms
: 메시지(log)를 얼만큼의 기간동안 보관할지 설정 (default 7 days)retention.bytes
: 메시지(log)를 얼만큼의 용량만큼 보관할지 설정 (default -1; 제한 없음)log.retention.check.interval.ms
: 일정 주기를 가지고 체크하여 로그 삭제 (deafult 5 min)log.cleanup.policy
가compact
여야 함__consumer_offset
토픽(consumer group이 특정 topic을 어디까지 읽었는지 저장)이 compaction 사용느낀점
궁금한 점
팔로워가 특정 주기의 시간만큼 복제 요청을 하지 않는다면, 리더는 해당 팔로워가 리플리케이션 동작에 문제가 발생했다고 판단해 ISR그룹에서 추방합니다.
특정 주기
-> 옵션?ISR 그룹에서 추방
하면 무슨 일이 벌어질까? 새로운 팔로워를 찾을까?ISR 리스트 정보는 가용성 보장을 위해 Zookeeper에 저장
Kafka 3.0부터는 어떻게 저장할까? KRAFT?