본문 바로가기
Kafka

[Kafka] 카프카 로그 보관 주기

[카프카] 데이터 보관

카프카는 컨슈머(Consumer)가 데이터를 가져가더라도 토픽(Topic)의 데이터는 삭제되지 않는다.

컨슈머나 프로듀서(Proucer) 또한 데이터의 삭제를 요청할 수 없다.

오직 브로커 만이 데이터를 삭제할 수 있다.

데이터 삭제는 파일 단위 '로그 세그먼트 (log segment)'로 이루어진다.

로그 세그먼트 (log segment)

로그 세그먼트에는 다수의 데이터가 들어 있기 때문에 다른 데이터베이스처럼 특정 데이터를 삭제할 수 없다.

세그먼트는 데이터가 쌓이는 동안 파일 시스템으로 열려있으며 카프카 옵션에 따라 파일이 닫힌다.

세그먼트 파일이 닫히는 간격을 줄이기 위해 log.segment.bytes 를 작은 용량으로 설정하면 데이터들을 저장하는 동안 세그먼트 파일을 주자 여닫음으로써 부하가 발생할 수 있으므로 주의해야 한다.

로그 보관 주기 옵션

log.segment.bytes

  • 바이트 단위로 최대 세그먼트 크기를 정의 (기본값: 1GB)

log.segment.ms

  • log segment 파일이 닫히게 (삭제) 되는 시간을 정의

log.cleanup.policy

  • delete 또는 compact로 설정(기본값: delete)하며 토픽단위로 설정 가능
  • delete로 설정된 경우 로그 세그먼트는 시간이나 크기제한에 도달할 때 주기적으로 삭제
  • compact로 설정된 경우 불필요한 레코드를 없애기 위해 압축을 사용

log.retention.bytes

  • 파티션의 최대 크기를 제어하며 이 값은 모든 파티션에 적용
  • “delete” retention policy를 사용하고 있고, 파티션의 크기가 retention.bytes를 넘어서는 경우엔 예전 로그를 삭제하고 새로운 로그를 추가한다.
  • 기본값은 -1로 파티션의 크기에 제약을 주지 않는다. (이 경우엔 retention.ms 값을 얼마로 하는지에 따라 파티션의 크기가 결정된다.)
  • ex) 3개의 파티션으로 구성된 토픽에 log.retention.bytes를 10MB 로 설정하면 해당 토픽에 보관되는 메시지의 전체 크기는 최대 30MB 가 된다.

log.retention.ms

  • 로그 세그먼트를 보유할 시간을 정의 (기본값: 7일, 토픽별로 정의 가능)

log.retention.check.interval.ms

  • 삭제할 대상을 확인하기 위한 닫힌 세그먼트 파일을 체크하는 간격 (기본값: 5분)

log.cleaner.enable

  • 압축을 활성화 하려면 true로 설정

log.cleaner.threads*

  • 로그의 압축을 위한 작업자 스레드 수 지정

log.cleaner.backoff.ms

  • 정리가 필요한 로그가 있는지 확인하는 주기

log.index.size.max.bytes

  • 바이트 단위로 오프셋 인덱스의 최대 크기를 설정 (기본값: 1GB)
  • 토픽별로 설정 가능

log.index.interval.byte

  • 새로운 항목이 오프셋 인덱스에 추가되는 주기 (기본값: 4096)
  • 데이터를 가져오는 개별 요청에서 브로커는 가져오기를 시작하고 끝낼 로그 내의 올바른 위치를 찾기 위한 바이트 수에 대해 일정하게 살펴본다.
  • 값을 높게 설정한 경우 인덱스 파일이 커지고 더 많은 메모리를 사용하게 되지만 검사하는 횟수는 줄어듬

log.flush.interval.message

  • 디스크로 내보내기 전에 메모리에 보유할 메시지의 개수 (기본값: 922337036854775807)
  • 확실하게 보유하는지 보장하는 것은 아니나, 알맞게 제어하도록 도와줌

log.flush.interval.ms

  • 디스크로 내보내기 전에 메모리에 보유할 토픽 내의 메시지에 대한 최대 시간을 밀리초 단위로 설정

 


References


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글