1 분 소요

Kafka에서 스냅샷(snapshot)로그(log)는 데이터 저장과 복구와 관련된 중요한 개념입니다. 이 두 개념은 Kafka 클러스터의 일관성을 유지하고 장애 복구를 효율적으로 처리하기 위한 메커니즘입니다. 각각의 기능과 차이점을 아래에서 설명합니다.

  1. 로그 (Log)
    Kafka에서 로그는 토픽의 파티션(partition)에 저장되는 데이터 스트림입니다. Kafka의 로그는 다음과 같은 역할과 특징을 가집니다.

특징:
기록 순서: 로그는 각 메시지를 일련의 이벤트로 저장하며, 메시지들이 순차적으로 추가됩니다. 이는 토픽의 파티션에 존재하며, 각 메시지에는 오프셋이 부여됩니다.

내구성: 로그에 기록된 메시지는 디스크에 지속적으로 저장되며, 일정 기간 동안 유지됩니다. 이 기간은 log.retention.ms와 같은 설정에 의해 제어됩니다.

복제 및 복구: Kafka는 로그를 복제하여 여러 브로커에 저장하고, 장애 발생 시 다른 복제본을 통해 데이터를 복구할 수 있습니다. 클러스터 내 리더-팔로워 관계를 통해 복제된 로그가 클라이언트에 의해 소비됩니다.

장점: 로그는 이벤트 스트리밍 시스템에서 효율적으로 데이터를 저장하고 처리하는 방법으로, 컨슈머가 로그의 특정 오프셋에서 데이터를 다시 읽거나 복구할 수 있게 해줍니다.

요약:
로그는 순차적으로 기록되는 메시지의 리스트입니다.
메시지들은 파티션에 저장되며, 오프셋으로 구분됩니다.
내구성이 있고 복제가 가능하여 데이터 복구와 소비를 용이하게 합니다.

  1. 스냅샷 (Snapshot)
    Kafka에서 스냅샷은 일반적으로 Kafka Streams와 같은 상태 저장 애플리케이션에서 사용됩니다. Kafka의 기본 메시지 스트리밍 개념보다는 상태 저장과 장애 복구와 관련이 있습니다.

특징:
상태 저장: Kafka Streams와 같은 상태 저장 애플리케이션은 상태 저장소(state store)를 유지합니다. 이 상태는 애플리케이션이 처리 중인 데이터에 따라 달라지며, 이러한 상태를 일정한 시점에 스냅샷으로 저장합니다.

복구 속도 향상: 스냅샷은 상태 저장소의 특정 시점에서의 상태를 기록하여, 장애가 발생했을 때 빠르게 복구하는 데 사용됩니다. 즉, 로그에서 하나하나의 이벤트를 재처리하는 대신, 가장 최신의 스냅샷에서부터 복구를 시작할 수 있습니다.

체크포인트: 스냅샷은 일종의 체크포인트 역할을 합니다. Kafka Streams는 로그에서 스냅샷 이후의 변경 사항만 처리하여 복구할 수 있습니다.

장점: 로그를 처음부터 끝까지 다시 읽을 필요 없이 효율적으로 복구가 가능합니다.

요약:
스냅샷은 상태 저장소의 특정 시점에서의 상태를 기록한 것입니다.
상태 저장 애플리케이션에서 장애가 발생했을 때 빠르게 복구하는 데 사용됩니다.
로그를 모두 읽지 않고 스냅샷 이후의 데이터만 처리하면 되므로 복구 속도가 빠릅니다.

댓글남기기