카프카 파티션 복제 동작 원리

Subin Park·2023년 4월 23일
0

Kafka

목록 보기
3/4
post-thumbnail

복제 동작

통신 방식

  • 다른 메세지 큐와 다르게 리더가 push해서 복제하는 것이 아닌 팔로워가 pull 해서 메세지를 복제하는 방식
  • 팔로워는 리더에게서 가져간 message를 다 복제하면 리더에게 해당 사항을 공지
  • 이러한 방식을 사용했기 때문에 리더와 팔로워 간의 복제 동작이 매우 빠르면서 신뢰할 수 있는 장점이 존재
  • read/write로 바쁜 리더의 복제를 위한 통신에 대한 역할을 줄여주기 때문에 리더의 부하를 줄일 수 있음
  • 위와 같은 방식을 통해 리더가 ISR 목록을 구성할 수 있게됨

High Watermark (하이 워터마크)

  • ISR 그룹 내에서 팔로워들이 리더의 특정 지점까지 복제가 완료되면 리더는 내부적으로 해당 메세지(오프셋)까지 commit 처리를 진행
  • 마지막으로 commit을 완료한 오프셋의 위치를 하이 워터마크라고 지정
  • 컨슈머는 하이 워터마크 이후의 데이터를 가져갈 수 없음 -> 그 이후의 데이터는 복제에 대한 검증이 되어있지 않기 때문

복제 동작 과정

  • jade-test01 이라는 토픽 내 파티션 1개, 리플리케이션 팩터 2로 지정된 환경
  1. 리더는 프로듀서로부터 message1(오프셋)를 받아 자신의 파티션에 저장
  2. 팔로워가 리더에게 fetch 진행, message1(오프셋0)의 존재를 확인하고 복제 진행
  3. 리더는 모든 팔로워가 message1(오프셋0)에 대해 요청을 보낸것을 확인하고 하이 워터마크를 1로 올림
  4. 리더는 프로듀서로부터 message2(오프셋1)를 받아 자신의 파티션에 저장
  5. 팔로워가 리더에게 fetch 진행, 리더의 하이 워터마크의 변화를 확인하고 팔로워 자신의 하이 워터마크를 1로 올림
  6. 팔로워는 message2(오프셋1)에 대해 복제 진행
  7. 팔로워는 오프셋2(message X)에 대한 요청을 보내고, 요청을 받은 리더는 하이 워터마크를 2로 올림
  8. 팔로워는 1번 오프셋인 message2까지 복제를 완료했지만 아직 리더로부터 하이 워터마크를 2로 올리는 내용을 전달받지 못한 상태



장애 복구

Leader Epoch (리더 에포크)

  • 카프카의 파티션들이 복구 동작을 할 때 메세지의 일관성을 유지하기 위한 용도로 사용
  • 컨트롤러에 의해 관리되는 32비트의 숫자로 표현
  • 복구 동작 시 하이 워터마크를 대체하는 수단
  • 리더 에포크가 없을 시 팔로워는 자신의 하이 워터마크 보다 높은 message를 전부 삭제 처리 진행

장애 복구 동작 과정

  • 위의 복제 동작 과정을 이어서 진행
  1. 팔로워는 1번 오프셋인 message2까지 복제를 완료했지만 아직 리더로부터 하이 워터마크를 2로 올리는 내용을 전달받지 못한 상태에서 예기치 못한 장애로 인해 팔로워 다운
  2. 장애 후 다시 동작하기 시작한 팔로워는 복구 동작을 하며 리더에게 리더 에포크 요청을 보냄
  3. 리더는 리더 에포크 응답으로 자신의 하이 워터마크 정보(message2-오프셋1)를 팔로워에게 보냄
  4. 팔로워는 자신의 하이 워터마크보다 높은 message2(오프셋1)을 삭제하지 않고 리더의 응답을 확인한 후 자신의 하이 워터마크를 2로 조정

  • 위의 과정을 통해 리더와 팔로워의 하이 워터마크가 동기화되었기 때문에 리더 파티션에 장애가 발생해도 메세지 손실이 발생하지 않음

0개의 댓글