리더 에포크(Leader Epoch)
리더 에포크(Leader Epoch)는 분산 시스템에서 리더 선출과 관련된 개념으로, 주로 Apache Kafka와 같은 분산 메시지 브로커 시스템에서 사용된다. 리더 에포크는 파티션 리더의 변경을 추적하기 위한 메커니즘이다.
리더 에포크는 분산 시스템에서 리더의 상태 변화를 추적하고, 일관성을 유지하며, 장애 발생 시 효율적인 복구를 지원하는 중요한 메커니즘이다.
리더 에포크가 왜 중요한지 한 예시를 통해 설명하도록 하겠다.
리더 변경시 문제점
위 그림과 같이 팔로워 파티션과 리더 파티션이 있다고 가정해 보겠다. 리더 파티션은 message1까지 메시지가 커밋되었고, 팔로워 파티션은 message 0까지 커밋되었다.
리더 파티션에 장애가 발생해 정상적으로 작동하지 못한다고 가정해보자. 위 그림과 같이 팔로워 파티션이 리더 파티션으로 새로 선출된다. 새로운 리더 파티션이 선출되면 커밋(하이워터마크)을 확인한다. 커밋되지 않은 메시지를 없애는 과정을 거친다.
바로 여기서 문제점이 발생한다. 새 리더 파티션(구 팔로워 파티션)이 message 1을 받았음에도 커밋되지 않았기 때문에 message 1을 날리게 된다. 이로인해 message 1이 유실되는 문제점이 발생한다.
이 문제를 해결하기 위해 리더 에포크를 사용하게 되었다.
리더 에포크 사용
이전과 같은 상황에서 리더 에포크를 사용하여 문제를 해결해보겠다.
팔로워 파티션이 새 리더 파티션으로 변경되고, 구 리더 파티션이 팔로워 파티션으로 변경된다. 이때 새 리더 파티션은 커밋이 안 된 메시지를 날리는 것이 아닌 브로커에게 구 리더 파티션의 커밋 정보를 확인한다.
새 리더 파티션은 구 리더 파티션(현 팔로워 파티션)이 message 1까지 커밋했다는 정보를 받고 message 1을 커밋한다.
'kafka' 카테고리의 다른 글
협력적 스티키 파티션 할당 전략 (0) | 2024.07.08 |
---|---|
static membership (0) | 2024.07.08 |
카프카 버전별 차이 및 업그레이드 (0) | 2024.07.08 |
Kafka 기초 및 명령어 (0) | 2024.07.08 |