Kafka의 안전성과 복구 전략
Apache Kafka는 대용량의 실시간 데이터 스트림 처리를 위한 분산 메시징 시스템입니다. Kafka의 안정성과 높은 가용성을 위해 여러 가지 전략과 구성 요소가 사용됩니다. 본 글에서는 Kafka의 주요 안전성 및 복구 전략에 대해 알아보겠습니다.
1. 데이터 복제
Kafka는 데이터의 내구성을 보장하기 위해 각 Topic의 파티션을 여러 개의 복제본으로 구성합니다. 각 파티션은 주 브로커(리더)와 여러 팔로워 브로커(복제본)으로 구성됩니다.
Producer가 데이터를 전송하면, 해당 데이터는 주 브로커에 저장되고, 주 브로커는 복제본 브로커들에게 데이터를 복제하여 저장합니다. 이렇게 복제된 데이터는 클러스터 내에 여러 브로커에 분산 저장되므로, 하나의 브로커가 장애가 발생해도 다른 브로커들에게 데이터를 안전하게 유지할 수 있습니다. 따라서 데이터 손실을 방지하고 높은 가용성을 제공합니다.
Kafka의 각 파티션은 Leader 하나와 그에 따른 여러 Follower를 가질 수 있습니다. 역할은 아래와 같습니다.
Leader와 Follower
- Kafka는 각 파티션에 대한 복사본 중 하나를 Leader로 선정하고, 나머지를 Follower로 지정합니다.
- Leader는 해당 파티션의 모든 읽기 및 쓰기 연산을 처리하는 주요 노드입니다.
- Follower는 Leader의 데이터를 지속적으로 복제하여 동기화하며, 이를 통해 데이터의 안정성이 보장됩니다. 만약 Leader가 실패하면, Follower 중 하나가 Leader의 역할을 대체하게 됩니다.
- Leader와 Follower 전략은 Kafka 기본 설정입니다.
2. 데이터 보존
데이터 보존은 Retention Policy를 통해 설정됩니다. Kafka는 Topic에 저장된 데이터를 일정 기간이나 크기를 기준으로 보존할 수 있습니다. 보존 정책은 시간 기반(TTL)과 크기 기반 두 가지 방식으로 구성됩니다.
- 시간 기반 보존 : 데이터가 특정 시간 동안 Kafka의 토픽에 보관되게 설정하는 방법입니다. 특정 시간이 지나면 데이터는 삭제됩니다.
- 크기 기반 보존 : 크기 기반 보존은 토픽의 데이터 크기가 설정된 최대 용량을 초과할 경우, 오래된 메시지부터 삭제하는 방식으로 동작합니다.
3. 장애 상황 대응 방식
Kafka 클러스터는 다양한 원인으로 장애에 직면할 수 있습니다. 이러한 장애에 대응하기 위한 주요 전략은 다음과 같습니다.
- Leader Election : Leader 파티션이 위치한 브로커에 문제가 발생하면, Follower 중 하나가 새 Leader로 승격시키는 방식입니다.
- Replica Reassignment: Kafka 클러스터의 브로커가 장애를 겪거나 유지보수를 위해 내려가야 할 경우, 해당 브로커에 있는 파티션의 리플리카들을 다른 브로커로 재배치하는 방식입니다.
이외에도 여러가지 설정들이 존재합니다.
- Min.insync.replicas: 이 설정은 토픽의 파티션에 데이터를 쓸 때 필요한 최소 동기화된 리플리카의 수를 정의합니다. 이 설정은 데이터 손실의 위험을 줄이는 데 도움을 줍니다.
- Unclean leader election: 모든 리플리카가 최신 상태로 동기화되지 않은 상황에서도 리더를 선출할 것인지를 결정하는 설정입니다. 이것은 데이터 손실의 위험이 있지만, 데이터의 가용성을 위해 사용될 수 있습니다.
- Replication Factor: 파티션의 리플리카 수를 증가시켜 데이터의 내구성을 향상시킵니다.
- End-to-end latency monitoring: 메시지가 생산자로부터 소비자까지 전달되는 데 걸리는 시간을 모니터링하여 잠재적인 문제를 조기에 감지합니다.
- Consumer lag monitoring: 소비자가 얼마나 많은 메시지를 처리해야 하는지 모니터링하여 그 지연을 관찰하고 조치를 취합니다.
4. 데이터 백업 및 복구: Backup & Restoration
시스템의 안전성을 위해 데이터 백업은 필수이며, 관리자가 할수있는 백업 방법은 대표적으로 아래 2가지가 있습니다.
- 주기적 스냅샷: Kafka 토픽의 데이터를 주기적으로 스냅샷하여 외부 저장소에 저장합니다.
- Event Log: 데이터 변경 내역을 기록하고, 이를 백업 저장소에 보관합니다.
백업 데이터를 통한 복구
- 스냅샷 복구: 백업된 스냅샷을 활용하여 전체 데이터를 복구합니다.
- Event Log 복구: 마지막 백업 시점 이후의 변경 사항을 순차적으로 적용, 데이터를 최신 상태로 복구합니다.
결론적으로, Apache Kafka는 다양한 안전성 및 복구 전략을 통해 높은 가용성과 데이터 내구성을 제공합니다. 이러한 전략을 통해 Kafka 기반의 시스템은 안정적인 데이터 스트림 처리를 보장할 수 있습니다.
'Architecture' 카테고리의 다른 글
쉽게 이해하는 SOLID 원칙: 유지보수성을 높이는 객체지향 설계 방법 (2) | 2024.01.02 |
---|---|
효율적인 데이터 분산 저장 전략: 샤딩과 리밸런싱의 이해 (0) | 2023.08.11 |
DB 성능 저하 해결 전략: 스케일링, 리플리케이션, 샤딩 그리고 클러스터링 (1) | 2023.08.04 |
메시지 기반 아키텍처: 디커플링, 확장성, 높은 가용성 및 비동기 통신 (0) | 2023.08.01 |
자바 빌더 패턴: 객체 생성 (0) | 2023.07.22 |