IT/Kafka
[Kafka] 카프카 기본개념 - 세그먼트와 삭제 주기 관련
forest-33
2024. 4. 27. 15:21
세그먼트와 삭제 주기
세그먼트삭제 Policy
cleanup.policy=delete
- 엑티브가 아닌 세그먼트 기준으로 세그먼트 로그 삭제
- retention.ms : 세그먼트를 보유할 최대 기한. 기본 값은 7일 (보통 3일로 설정함, 워킹데이 때문에)
- reteintion.bytes: 파티션당 로그 적재 바이트값 기본 값은 -1(지정x)
- log.retention.check.interval.ms : 브로커에서 데이터 삭제를 체크하며,세그먼트 대한 삭제 확인 간격 기본값 5분
- 레코드 단위로는 개별 삭제, 수정 불가함 (offset0, offset1, offset2 -> offfset1만 삭제 불가)
- 수정 삭제 불가하기 때문에 프로듀서에서 레코드에 대한 validation 체크 필수!
cleanup.policy=compact
- 각 레코드에 있는 메시지키를 단위로 가장 최근의 메시지 키만 남기고 삭제 (active 세그먼트는 제외)
- 위 그림의 K3 기준으로 13, 16번 offset 중 13 번 삭제
테일(클린) / 헤드(더티) 영역
- 테일영역 : 이미 압축된 레코드들. 클린 로그라고도 함
- 헤드영역 : 압축 정책이 되기 전 레코드들. 더티 로그라고도 함
min.cleanable.dirty.ratio
- 세그먼트에 남아 있는 테일 영역의 레코드 개수와 헤드 영역의 레코드 개수의 비율
- 데이터 압축의 시작점은 min.cleanable.dirty.ratio 값을 따름
- 0.5로 지정하면 테일 영역과 헤드영역의 레코드 개수가 같을 때 압축 실행
- 0.9과 같이 크게 설정하면(테일0.1 헤드 0.9) 한번 압축 할때 많은 수를 압축할 수 있지만 용량 효율이 좋지 않음
- 0.1과 같이 작게 설정하면 압축이 자주일어남 -> 브로커에 부담
출처: 인프런 아파치-카프카-애플리케이션-프로그래밍