Kafka 에서 snapshot vs log
Kafka에서 스냅샷(snapshot)과 로그(log)는 데이터 저장과 복구와 관련된 중요한 개념입니다. 이 두 개념은 Kafka 클러스터의 일관성을 유지하고 장애 복구를 효율적으로 처리하기 위한 메커니즘입니다. 각각의 기능과 차이점을 아래에서 설명합니다.
- 로그 (Log)
Kafka에서 로그는 토픽의 파티션(partition)에 저장되는 데이터 스트림입니다. Kafka의 로그는 다음과 같은 역할과 특징을 가집니다.
특징:
기록 순서: 로그는 각 메시지를 일련의 이벤트로 저장하며, 메시지들이 순차적으로 추가됩니다. 이는 토픽의 파티션에 존재하며, 각 메시지에는 오프셋이 부여됩니다.
내구성: 로그에 기록된 메시지는 디스크에 지속적으로 저장되며, 일정 기간 동안 유지됩니다. 이 기간은 log.retention.ms와 같은 설정에 의해 제어됩니다.
복제 및 복구: Kafka는 로그를 복제하여 여러 브로커에 저장하고, 장애 발생 시 다른 복제본을 통해 데이터를 복구할 수 있습니다. 클러스터 내 리더-팔로워 관계를 통해 복제된 로그가 클라이언트에 의해 소비됩니다.
장점: 로그는 이벤트 스트리밍 시스템에서 효율적으로 데이터를 저장하고 처리하는 방법으로, 컨슈머가 로그의 특정 오프셋에서 데이터를 다시 읽거나 복구할 수 있게 해줍니다.
요약:
로그는 순차적으로 기록되는 메시지의 리스트입니다.
메시지들은 파티션에 저장되며, 오프셋으로 구분됩니다.
내구성이 있고 복제가 가능하여 데이터 복구와 소비를 용이하게 합니다.
- 스냅샷 (Snapshot)
Kafka에서 스냅샷은 일반적으로 Kafka Streams와 같은 상태 저장 애플리케이션에서 사용됩니다. Kafka의 기본 메시지 스트리밍 개념보다는 상태 저장과 장애 복구와 관련이 있습니다.
특징:
상태 저장: Kafka Streams와 같은 상태 저장 애플리케이션은 상태 저장소(state store)를 유지합니다. 이 상태는 애플리케이션이 처리 중인 데이터에 따라 달라지며, 이러한 상태를 일정한 시점에 스냅샷으로 저장합니다.
복구 속도 향상: 스냅샷은 상태 저장소의 특정 시점에서의 상태를 기록하여, 장애가 발생했을 때 빠르게 복구하는 데 사용됩니다. 즉, 로그에서 하나하나의 이벤트를 재처리하는 대신, 가장 최신의 스냅샷에서부터 복구를 시작할 수 있습니다.
체크포인트: 스냅샷은 일종의 체크포인트 역할을 합니다. Kafka Streams는 로그에서 스냅샷 이후의 변경 사항만 처리하여 복구할 수 있습니다.
장점: 로그를 처음부터 끝까지 다시 읽을 필요 없이 효율적으로 복구가 가능합니다.
요약:
스냅샷은 상태 저장소의 특정 시점에서의 상태를 기록한 것입니다.
상태 저장 애플리케이션에서 장애가 발생했을 때 빠르게 복구하는 데 사용됩니다.
로그를 모두 읽지 않고 스냅샷 이후의 데이터만 처리하면 되므로 복구 속도가 빠릅니다.
댓글남기기