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과 같이 작게 설정하면 압축이 자주일어남 -> 브로커에 부담 

 

출처: 인프런 아파치-카프카-애플리케이션-프로그래밍