Contents

Kafka Cluster Urp란?

Kafka Cluster URP란?

사내 Github의 운영 Issue 노하우를 읽다가 카프카 클러스터 운영 중 흔히 접할 수 있는 메시지라고 하셔서 찾아봤습니다.

참고한 문서

Replication이 뭔가요?

먼저 기저 지식에 대해 정리하자면, 카프카는 HA를 위해 Replication 기능을 제공합니다. Replication = 각 토픽의 파티션들을 카프카 클러스터 내의 다른 브로커들로 복제하는 것. 토픽 생성 시점에서 레플리케이션의 수를 지정할 수 있습니다. 카프카의 레플리케이션은 토픽 자체를 복사하는 것이 아닌, 토픽을 구성하는 각자의 파티션을 복제합니다.

이런 레플리케이션을 조율하는 주요한 설정 값으로는 Replication Factor가 있습니다. Replication Factor의 기본 값은 1이지만, 1이었을 때에는 메시지를 특정 브로커에만 전달하고 있기 때문에 전달받는 브로커에 장애 발생 시 subscriber들에게 올바르게 메시지를 전달할 수 없습니다. Replication Factor를 2 이상으로 설정하게 되면 동일 토픽 내에 리더팔로워 브로커가 생기게 됩니다.

역할 가지고 있는 데이터 하는 일
리더 원본 Publisher가 전달한 데이터 수신 및 팔로워에게 제대로 전달
팔로워 복제본 리더의 데이터를 복제만 함

레플리케이션을 통해 레플리케이션된 토픽의 서버에 장애가 생겨도 리더를 변경하여 Producer의 요청을 처리할 수 있습니다.

하지만 레플리케이션을 사용한다는 것은 아래와 같은 단점이 존재

  1. 리더의 데이터를 그대로 복제하는 것이기 때문에 저장소 용량을 N배로 요구하게 됨.
  2. 토픽이 잘 레플리케이션되고 있는지에 대한 헬스 체크를 수행하기 때문에 브로커의 일부 리소스 사용량이 증가됨

따라서 레플리케이션 팩터를 무작정 크게 잡기보다는 적절한 수로 설정하는 것이 효율적입니다.

ISR은 무엇인가요?

리더와 팔로워는 다시 ISR (In Sync Replica)라는 일종의 그룹으로 뭉쳐서 관리됩니다. ISR은 다음과 같은 특징을 가집니다.

  1. 팔로워 레플리카가 리더 레플리카와 동기화되어 있다면 ISR이 됩니다.
  2. 리더 레플리카가 ISR 내 팔로워 레플리카가 일정 시간동안 fetch하지 않거나 / 마지막 메시지 복제하지 못했다면 추방
  3. 리더 레플리카가 중단된다면 ISR에 속한 팔로워 레플리카 중 하나가 리더로 선출

그래서 URP가 뭔가요?

카프카 클러스터의 현재 상태를 측정하는 메트릭 중 하나입니다. 카프카 클러스터 내의 지정된 Replication Factor를 만족하지 못하는 파티션의 개수를 나타냅니다. (Under Replicated Partitions) URP 경고가 나타났다는 것은, 카프카의 레플리케이션에 뭔가 문제가 생겨서 HA를 보장할 수 없는 상태가 되어가고 있다는 의미라고 이해했습니다. 주된 원인으로는

  1. 하나 이상의 브로커가 응답하지 않거나
  2. 클러스터 자체에 성능 이슈가 생겨서 하나 이상의 브로커가 떨어져 나간 경우

어떻게 해결하나요?

카프카 파티션 내의 문제 발생 원인이 되는 브로커를 변경 후 파티션 재지정

주키퍼를 재시작(!) 하는 방법 - 운영에서 사용해도 문제가 없는건지?

해결되었는지 확인하는 방법 : 카프카 클러스터의 Min ISP URP (ISP 내의 최소 URP 수가 충족 되었는지), URP 메트릭이 둘 다 OK 상태가 된다면 해결 되는 것으로 보입니다.