n-1개의 복제계수에 대해서

문해피와 제육볶음·2023년 9월 23일
0

Kafka

목록 보기
4/4

최근 n-1개의 복제계수로 토픽을 만들면 어떻게 메세지가 복제가될까라는 고민을 많이 했습니다. (n = 클러스터에서 브로커의 수)

파티션과 복제

파티션

파티션이란 메시지들이 저장되는 곳입니다. 하나의 토픽은 여러 개의 파티션으로 나뉘어져 있으며, 각각의 메시지는 하나의 파티션에 저장됩니다.


복제 계수

복제 계수는 각 파티션 데이터가 클러스터 내에서 몇 번 복사되어 유지되는지를 결정하는 값입니다. 만약 복제 계수를 2로 설정한다면, 각 파티션 데이터는 두 개의 브로커(서버)에 저장됩니다. 이 때 한 브로커가 리더 역할을 하고 다른 하나가 팔로워 역할을 합니다.

복제계수를 설정하는 목적

  • 데이터 안전성
  • 시스템 가용성을 확보

만약 어떤 한 서버(브로커)에서 장애가 발생하더라도 다른 서버에서 해당 데이터를 가져올 수 있으므로 데이터 손실 없이 서비스를 지속할 수 있습니다.(고가용성)

복제를 많이 하면 좋을까?

하지만 모든 것이 장점만 있는 것은 아닙니다.

  • 저장 공간 증가 : 복제 계수가 증가하면, 같은 데이터를 더 많은 브로커에 저장해야 합니다.

  • 네트워크 대역폭 사용량 증가 : 복제 계수를 늘리면, 원본 데이터와 동일한 크기의 데이터가 추가로 네트워크를 통해 브로커에 전송되어야 하므로, 이는 네트워크 대역폭 사용량의 증가를 의미합니다.

따라서 실질적으로 운영 환경에서는 시스템 요구사항과 사용 가능한 자원 등 여러 요소들을 고려해야합니다.


3개의 브로커와 2개의 복제계수

이번에는 3개의 브로커와 3개의 파티션이 있고 복제 계수가 2인 경우를 예로 들어보겠습니다. 이 경우 각 파티션은 두 개의 브로커에 걸쳐 저장되며, 하나는 리더, 다른 하나는 팔로워 역할을 합니다. 이때 모든 세 브로커는 활동 상태입니다.

예시

  • 파티션 1: 브로커 A(리더), B(팔로워)
  • 파티션 2: 브로커 B(리더), C(팔로워)
  • 파티션 3: 브로커 C(리더), A(팔로워)

이렇게 설정하면 각각의 데이터가 서버 사이에서 균등하게 분산되고, 만약 한 서버에서 장애가 발생해도 다른 서버에서 데이터를 가져올 수 있어서 내결함성이 향상됩니다.

그리고 여기서는 ISR이라는 개념으로 리플리케이션 그룹을 구성하게됩니다.

ISR (In-Sync Replicas)

  • 동기화된 복제본이라는 뜻
  • 리더 브로커와 동기화된 상태를 유지하는 팔로워 브로커들의 집합을 의미합니다.

팔로워 브로커가 리더 브로커와 동기화를 유지하기 위해서는 주기적으로 리더에게 데이터를 요청하고 이를 받기 때문에 Kafka 클러스터의 안정성데이터 일관성이 보장됩니다.

왜냐하면, 새로운 메시지가 커밋되고 소비자에게 전달되려면 그 메시지가 모든 ISR의 멤버에게 반드시 복사되어야 합니다.

그러면서 만약 한 브로커에서 장애가 발생해도 다른 서버에서 데이터를 가져올 수 있어서 내결함성이 향상됩니다.

이러한 과정은 Kafka의 고가용성내결함성을 보장하는 중요한 부분입니다.

0개의 댓글