Oh My Algorithm
Concept Guide키별 최신값 · 스냅샷

로그 컴팩션 (Log Compaction)

보존 기간이 지나면 오래된 것부터 지우는 것이 기본이지만, 어떤 토픽은 '지금 상태'가 필요합니다. 로그 컴팩션은 같은 키의 오래된 레코드를 지우고 마지막 값만 남겨, 로그가 곧 최신 스냅샷이 되게 합니다. 처음부터 읽으면 모든 키의 현재 값을 복원할 수 있습니다.

01로그 컴팩션 (Log Compaction)

사용자 프로필을 카프카에 보관합니다. 주소가 바뀔 때마다 새 줄로 덧붙입니다 — 고치는 게 아니라 쌓는 것입니다.

다른 사용자의 값도 같은 줄에 쌓입니다. 키가 달라도 한 파티션 안에 순서대로 들어갑니다.

user-42 가 판교로 이사했습니다. 앞의 '서울'을 지우지 않고 새 값을 덧붙입니다.

또 이사하면 또 덧붙습니다. 이대로 두면 자주 바뀌는 키 때문에 로그가 끝없이 커집니다.

user-7 도 대전으로 옮겼습니다. 지금 이 로그를 처음부터 읽으면 현재 주소는 알 수 있지만, 읽을 양이 계속 늘어납니다.

여기서 컴팩션이 동작합니다. 키마다 마지막 값만 남기고 앞의 것들을 지울 대상으로 표시합니다.

정리가 끝나면 키당 한 줄만 남습니다. 번호는 새로 매기지 않아 오프셋에 구멍이 생기지만, '지금 상태'는 그대로 읽힙니다.

그래서 서비스가 재시작하면 이 토픽을 처음부터 읽는 것만으로 전체 프로필을 복원할 수 있습니다.

Log · offset0 · 42Seoul
1 / 8

정리

값이 null 인 레코드(툼스톤)를 쓰면 '이 키를 지우라'는 뜻이 되고, 잠시 뒤 그 키가 통째로 사라집니다.

02 쉽게 이해하기

For Everyone
🔑핵심 동작

같은 키의 옛 레코드를 지우고 마지막 값만 남깁니다. 오프셋에 구멍이 생기지만 처음부터 읽으면 현재 상태가 그대로 복원됩니다.

💡쉽게 말하면

컴팩션은 키를 기준으로 동작합니다.

같은 키가 여러 번 쓰였으면 가장 나중 것만 남기고 앞의 것들을 지웁니다.

값이 null 인 레코드(툼스톤)는 '이 키를 삭제하라'는 표시로 쓰이고, 일정 시간 뒤 함께 사라집니다.

덕분에 로그 전체를 처음부터 읽으면 현재 상태가 그대로 재구성되어, 캐시·설정·프로필 같은 상태 저장에 쓰입니다.

📍어디에 쓰나
  • 키-값 상태를 카프카로 보관(CDC·설정·프로필)
  • 서비스 재시작 시 상태 복원
  • 무한히 커지는 토픽의 용량 관리

03 자주 묻는 질문

FAQ
로그 컴팩션 (Log Compaction)란 무엇인가요?+

보존 기간이 지나면 오래된 것부터 지우는 것이 기본이지만, 어떤 토픽은 '지금 상태'가 필요합니다. 로그 컴팩션은 같은 키의 오래된 레코드를 지우고 마지막 값만 남겨, 로그가 곧 최신 스냅샷이 되게 합니다. 처음부터 읽으면 모든 키의 현재 값을 복원할 수 있습니다.

로그 컴팩션 (Log Compaction)은(는) 어디에 사용하나요?+

키-값 상태를 카프카로 보관(CDC·설정·프로필), 서비스 재시작 시 상태 복원, 무한히 커지는 토픽의 용량 관리

로그 컴팩션 (Log Compaction)를 쉽게 비유하면?+

같은 키의 옛 레코드를 지우고 마지막 값만 남깁니다. 오프셋에 구멍이 생기지만 처음부터 읽으면 현재 상태가 그대로 복원됩니다.