
Kafka Topic은 데이터의 용량과 시간 조건을 기준으로 데이터를 삭제하는 방식이 기본이에요. 이를 Retention이라고 해요.
기본적으로 retention.ms는 7일이고 retention.bytes에는 제한이 없어요.
즉, 기본 설정의 토픽에서는 7일이 지나면 데이터가 삭제되지만,
Compact Cleanup Policy를 사용하면 동일한 Key를 가진 Record 중 최신 Record만 유지할 수 있어요.
Kafka의 Compact Topic은 특정 키(key)에 대한 최신 데이터를 유지하는 방식의 토픽이에요.
로그 세그먼트에서 오래된 데이터를 삭제하지 않고, 같은 키에 대한 최신 메시지만 유지함으로써 데이터 정합성을 보장하는 데 유용해요.
Compact Topic은 기본적으로 Kafka의 Log Compaction 기능을 활용해서 오래된 데이터를 제거하고 최신 데이터를 유지하는 방식으로 동작해요.
기본 저장 방식: Compact Topic은 기존의 Append-Only 방식과 달리, 동일한 키를 가진 메시지 중 가장 최신의 데이터를 유지해요.
로그 컴팩션(Log Compaction): Kafka의 백그라운드 프로세스가 주기적으로 실행되며, 특정 키에 대해 가장 최신의 값을 제외한 나머지 데이터는 삭제돼요.
Null 값 지원: 특정 키의 값을 null로 설정하면 해당 키의 데이터는 삭제돼요 (Tombstone 메시지).
Log Compaction은 현재 Rolling Update 중인 Log Segment가 아닌 과거의 Log Segment에 적용돼요. segment.ms나 segment.bytes 설정을 통해 새로운 Log Segment가 생성될 때, 기존 Log Segment가 Log Compaction의 대상이 돼요.
이 과정에서 동일한 Key의 데이터 중 최신 값만 유지되고, 오래된 값들은 삭제돼요.
데이터 정합성 유지: 특정 키에 대한 최신 상태를 유지할 수 있어서 상태 저장(State Store) 용도로 적합해요.
디스크 사용량 절감: 불필요한 데이터가 제거되므로, 디스크 공간을 보다 효율적으로 사용할 수 있어요.
빠른 데이터 조회: 특정 키에 대한 최신 데이터를 빠르게 조회할 수 있어서, 캐싱 시스템과 유사한 역할을 수행할 수 있어요.
이전 데이터 복구 불가: 같은 키에 대해 과거 데이터가 삭제되므로, 과거 기록을 유지해야 하는 경우에는 적합하지 않아요.
컴팩션 프로세스의 비동기성: 로그 컴팩션은 백그라운드에서 주기적으로 실행되므로, 최신 데이터가 즉시 반영되지 않을 수도 있어요.
삭제 지연 가능성: 특정 키에 대한 삭제 요청이 바로 반영되지 않고, 로그 세그먼트가 주기적으로 정리될 때까지 유지될 수도 있어요.
| 항목 | Compact Topic | 일반 Topic |
|---|---|---|
| 데이터 저장 방식 | 최신 데이터만 유지 (동일 키 기준) | 모든 메시지 유지 (Append-Only) |
| 삭제 방식 | 같은 키의 이전 데이터 제거 | 일정 기간 후 데이터 삭제 (Retention) |
| 주요 활용 사례 | 상태 저장, 사용자 프로필 관리, 설정 값 유지 | 실시간 스트리밍, 로그 데이터 저장 |
| 데이터 보존 기간 | 무한 유지 가능 (압축 후 최신 데이터 유지) | Retention 설정에 따라 삭제 |
Compact Topic은 특정 사용자의 최신 프로필 데이터를 유지하는 데 유용해요. 예를 들어, 사용자가 이름을 변경하면 이전 이름 대신 최신 이름만 유지돼요.
애플리케이션의 구성(configuration) 정보를 Kafka를 통해 관리할 때, Compact Topic을 활용하면 최신 설정 값만을 유지할 수 있어요.
마이크로서비스 환경에서 특정 키에 대한 최신 상태를 유지해야 할 때, Compact Topic을 활용하면 불필요한 데이터 전송 없이 최신 데이터를 동기화할 수 있어요.
데이터 삭제 정책: Compact Topic에서는 동일한 키를 가진 데이터가 컴팩션될 수 있지만, 삭제 요청은 null 값을 지정해야 반영돼요.
적절한 Partition 설정: Compact Topic의 성능을 최적화하려면 적절한 Partition 수를 설정해서 데이터 분산을 고려해야 해요.
Log Compaction 주기: 컴팩션 주기는 Kafka 브로커의 설정에 따라 달라질 수 있어서, 이를 적절히 조정해야 최신 데이터 유지가 원활해요.
Kafka의 Compact Topic은 최신 상태 데이터를 유지하는 데 최적화된 기능을 제공하며, 특정 키에 대한 최신 값을 저장하는 용도로 적합해요.
사용자 프로필, 설정 데이터, 상태 동기화와 같은 분야에서 활용할 수 있으며,
로그 컴팩션을 통해 불필요한 데이터 저장을 최소화할 수 있어요.
하지만 과거 데이터 복원이 어렵고, 삭제 지연이 발생할 수 있다는 점을 고려해야 해요. 결국 상황에 맞게 선택해서 사용하는 것이 중요해요.