Kafka/Kafka

Kafka Log Segment

seungh0 2023. 4. 1. 00:53
반응형

로그 세그먼트

  • 카프카의 토픽으로 들어오는 레코드는 세그먼트라는 파일에 저장된다.
  • 메시지는 정해진 형식에 맞추어 순차적으로 로그 세그먼트 파일에 저장된다.
  • 로그 세그먼트에는 메시지의 내용만 저장되는 것이 아니라 메시지의 키, 밸류, 오프셋, 메시지 크기와 같은 정보가 함께 저장됨, 로그 세그먼트 파일들은 브로커의 로컬 디스크에 보관된다.
  • 하나의 로그 세그먼트 크기가 너무 커져버리면 파일을 관리하기 어렵기 때문에, 로그 세그먼트의 최대 크기는 1GB가 기본값으로 설정되어 있음.
  • 로그 세그먼트가 1GB보다 커지는 경우 기본적으로 롤링 전략을 사용
    • 하나의 로그 세그먼트에 카프카로 인입되는 메시지들을 계속 덧붙이다가 로그 세그먼트의 크기가 1GB에 도달하면 해당 세그먼트 파일을 클로즈하고, 새로운 로그 세그먼트를 생성하는 방식으로 진행됨.
  • 1GB 크기의 로그 세그먼트 파일이 무한히 늘어나는 경우를 대비해 로그 세그먼트에 대한 관리 계획을 수립해둬야 한다.
    • 로그 세그먼트를 관리하는 방법은 로그 세그먼트 삭제와 컴팩션으로 구분할 수 있다.


로그 세그먼트 삭제

  • 기본 값임.
  • 로그 세그먼트의 삭제 작업은 기본적으로 5분 주기로 로그 세그먼트 파일을 체크하면서 삭제 작업을 수행함.
# server.properties
log.cleanup.policy=delete 
  • 토픽마다 보관 주기를 조정해서, 얼마만큼의 기간동안 카프카에 로그를 저장할지를 결정하고 관리할 수 있다.
  • 카프카의 기본 설정값은 7일(retention.ms)이므로, 모든 세그먼트 파일은 7일이 지남과 동시에 전부 삭제된다.
    • retention.bytes라는 옵션을 이요해 지정된 크기를 기준으로도 로그 세그먼트를 삭제할 수 있다.


로그 세그먼트 컴팩션

  • 로그 컴팩션은 기본적으로 로컬 디스크에 저장되고 있는 세그먼트를 대상으로 실행되는데, 현재 활성화된 세그먼트는 제외하고 나머지 세그먼트를 대상으로 컴팩션이 실행된다.
    • 메시지의 키 값을 기준으로 과거 정보는 중요하지 않고 가장 마지막 값이 필요한 경우에 사용한다.
  • 컴팩션은 메시지의 키값을 기준으로 마지막 데이터만 보관하게 된다.
    • 따라서 로그 컴팩션 기능을 사용하고자 하면, 카프카로 메시지를 전송할 때 키도 필수값으로 전송해야 한다.
  • 로그 컴팩션의 장점으로는 빠른 장애 복구이다.
    • 장애 복구 시 전체 로그를 복구하지 않고, 메시지의 키를 기준으로 최신의 상태만 복구하기 때문에 복구 시간을 줄일 수 있다는 장점을 가짐.
  • 카프카에서 로그 컴팩션 작업이 실행되는 동안 브로커의 과도한 입출력 부하가 발생할 수 있으니 주의가 필요하다.

 

로그 컴팩션 설정

cleanup.policy=compact
log.cleanup.policy=compact
log.cleaner.min.compaction.lag.ms=0
log.cleaner.max.compaction.lag.ms=0
log.cleaner.min.cleanable.ratio=0.5
  • cleanup.policy=compact
    • 토픽의 옵션, 토픽 레벨에서 로그 컴팩션을 설정할 때 적용하는 옵션
  • log.cleanup.policy=compact
    • 브로커 설정 파일에 적용, 브로커 레벨에서 로그 컴팩션을 설정할 때 적용하는 옵션
  • log.cleaner.min.compaction.lag.ms=0
    • 브로커 설정 파일에 적용, 메시지가 기록된 후 컴팩션하기 전 경과되어야 할 최소 시간
    • 옵션을 설정하지 않으면, 마지막 세그먼트를 제외하고 모든 세그먼트를 컴팩션할 수 있음.
  • log.cleaner.max.compaction.lag.ms=0
    • 브로커 설정 파일에 적용, 메시지가 기록된 후 컴팩션하기 전 경과되어야 할 최대 시간을 지정
  • log.cleaner.min.cleanable.ratio=0.5
    • 브로커 설정 파일에 적용, 로그에서 압축이 되지 않은 부분을 dirty라고 표현하며, 전체 로그 대비 더티의 비율이 50%가 넘으면 로그 컴팩션이 실행된다.
반응형