[Q]
server.properties의 retention.bytes 옵션은 주석처리 되어 있습니다. 그래도 기본 설정이 있나요?
그리고 cleanup.policy 옵션은 어디에 있나요?
[A]
질문 주신 두 가지를 정리해 드리겠습니다.
### 1) retention.bytes가 주석 처리된 경우, 기본값이 있나요?
– 네, 있습니다. 별도로 설정하지 않으면 브로커 기본값이 적용됩니다.
– retention.bytes의 기본값은 “무제한(-1)”로 간주되어, 시간 보존(retention.ms / retention.hours)이나 디스크 용량 한계에 도달하기 전까지 크기 기준으로는 로그가 삭제되지 않습니다.
– 결과적으로 retention.bytes를 주석 처리하거나 설정하지 않으면, “시간 기준 보존”이 주요 삭제 트리거가 됩니다. 디스크 압력에 대비해 운영 환경에 맞는 retention.bytes를 명시적으로 설정하는 것을 권장드립니다.
실무 팁
– 디스크 여유가 넉넉하지 않다면, 중요 토픽에 per-topic으로 retention.bytes를 지정해 브로커별 디스크 폭주를 방지하세요.
– 크기와 시간 기준을 동시에 설정하면, 둘 중 먼저 도달한 조건으로 삭제가 진행됩니다.
### 2) cleanup.policy 옵션은 어디에 있나요?
– 위치와 적용 범위
– 전역 기본값: 브로커 설정(server.properties)에서 log.cleanup.policy로 기본 정책을 정할 수 있습니다.
– 토픽별 오버라이드: 각 토픽 생성 시 또는 생성 후에 cleanup.policy를 개별로 지정할 수 있습니다. 토픽 단위 설정이 존재하면 전역 기본값보다 토픽 설정이 우선합니다.
– 가능한 값
– delete: 보존 시간(retention.ms/hours) 또는 크기(retention.bytes)를 기준으로 오래된 세그먼트를 삭제합니다.
– compact: 같은 키의 과거 버전을 정리하고 최신 버전만 유지합니다(툼스톤 처리 포함).
– compact,delete: 두 정책을 함께 적용합니다. 주기적으로 압축을 수행하고, 보존 한계에 도달하면 세그먼트 삭제도 진행됩니다.
적용 방법 예시
– 전역 기본값(브로커)
– server.properties에 log.cleanup.policy=delete (또는 compact,delete)와 같이 설정
– 브로커 롤링 재시작으로 적용
– 토픽별 변경(운영 중 동적 적용 가능)
– kafka-configs.sh –bootstrap-server <브로커> –alter –entity-type topics –entity-name <토픽명> –add-config cleanup.policy=delete
– 필요 시 retention.ms/retention.bytes도 함께 지정
### 권장 운영 체크리스트
– retention.bytes 미설정(무제한) 상태에서 메시지 동기화가 지연되면 디스크가 먼저 가득 차는 위험이 있습니다. 최소한 핵심 토픽은 크기·시간 보존을 함께 설정해 “제어 가능한” 삭제를 유도하세요.
– compact 토픽은 과거 버전 복기가 어려우므로, 재처리·감사를 위해서는 delete 정책의 원본 토픽을 별도로 보관하고 compact는 파생 토픽으로 분리하는 설계를 권장드립니다.
– 변경 후에는 브로커/토픽별 실제 동작을 모니터링(세그먼트 삭제 주기, lag, 디스크 사용률)하여 값이 적절한지 검증해 주세요.
자성님 환경에서 토픽별 cleanup.policy 현황과 retention.ms/bytes 설정을 알려주시면, 어떤 토픽에 어느 수준으로 크기/시간 보존을 병행할지 구체적으로 추천드리겠습니다.