개요

Kafka에서 복제본(Replication)에 대한 정책은 카프카 운영에 있어서 가용성과 성능에 있어서 큰 영향을 주는 설정이기 때문에 각 설정들이 어떤 것을 의미하는지 정확하게 이해하고 있어야합니다. 이를 정리하기 위한 포스팅을 합니다.

ISR(In Sync Replica) 이란?

카프카에서 복제본을 얘기할 때는 정확하게 는 파티션에 대한 브로커별로 생성되는 것을 의미합니다.

파티션에 대한 복제본은 리더와 팔로워로 나뉘어지고 ISR은 리더를 포함한 팔로워들이 동기화 되어있는 그룹들을 의미합니다.

리더는 새 메세지를 받으면 로컬에 로그를 쌓고 동시에 팔로워들에게 해당 메세지를 보내서 메세지를 동기화 합니다.

img.png

만약 리더가 판단 했을 때 특정 팔로워의 오프셋이 replica.lag.time.max.ms 설정 시간 안에 자신의 오프셋을 따라잡지 못하면 ISR에서 제외됩니다.

ISR 관련 중요 설정 값

  • min.insync.replicas: 쓰기 작업을 허용하기 위한 최소 ISR 수
  • replica.lag.time.max.ms: 복제본이 ISR에서 제외되기 전의 최대 지연 시간
  • unclean.leader.election.enable: ISR 외부의 복제본을 리더로 선출할지 여부 (기본값: true)

브로커 설정

1# 최소 ISR 수 설정
2min.insync.replicas=2
3
4# 복제본이 ISR에서 제외되기 전의 최대 지연 시간 (밀리초)
5replica.lag.time.max.ms=10000

토픽 생성 시 설정

1bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic my-topic --partitions 3 --replication-factor 3 --config min.insync.replicas=2

ISR 설정확인

1bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic my-topic --partitions 3 --replication-factor 3 --config min.insync.replicas=2

unclean.leader.election.enable

해당 값에 대한 기본 값은 카프카 버전에 따라서 다릅니다.

해당 값에 대한 의미는 브로커가 문제가 생겼을 때 해당 브로커에 파티션 리더가 있었다면 다른 브로커에 있는 파티션들 중에 하나는 리더 역할을 해야합니다.

하지만 만약에 기존 팔로워들이 ISR 그룹에 없는 상태에서 리더가 되어버리면 데이터의 손실이 일어날 수 있습니다.

이를 방지하기 위해서 ISR에 있는 파티션만 리더가 될 수 있게 하는 설정 값이 unclean.leader.election.enable=false 입니다. 이는 데이터의 손실이 없도록 보장해주지만 만약 유효한 ISR 그룹에 있는 팔로워 파티션들이 없다면 복구에 많은 시간이 걸릴 수 도 없습니다.

img.png

데이터의 손실보다 빠른 복구가 필요하다면 해당 값을 true로 하는게 더 좋을 수 있습니다.

정리

오늘 포스팅에서는 Kafka에서 ISR(In Sync Replica)에 대해서 알아보았습니다. ISR은 리더와 팔로워들이 동기화 되어있는 그룹을 의미하며 이를 통해서 데이터의 손실을 방지할 수 있습니다. 해당 내용이 도움이 되었으면 좋겠습니다.