Kafka 서버의 용량을 최적화 해보자

Gonee·2024년 9월 27일

삽질공간

목록 보기
6/6

Kafka 서버 Disk 사용량 최적화 작업과정에서 확인한 내용을 정리하고자 한다.

Log 삭제와 관련된 Topic 주요 설정

  • cleanup.policy
    • 데이터가 삭제되는 방식에 관한 옵션
      • delete 오래된 로그를 삭제 (default)
      • compact 로그 압축을 사용하여 같은 키를 가진 데이터의 가장 최신 상태만 유지
  • retention.bytes
    • 토픽에 저장되는 데이터의 최대 크기를 설정, byte 단위로 설정하며 설정값을 초과하면 가장 오래된 데이터를 삭제
    • -1 이 default로 제한이 없음
    • 디스크 사용량을 초과하지 않도록 데이터 크기 제한을 설정할 수 있음
  • retention.ms
    • 토픽에 저장된 데이터가 얼마나 오래 보관할지 설정하는 옵션, millisecond 단위로 설정
    • 7일이 기본값
  • segment.bytes
    • 세그먼트의 최대 크기를 byte 단위로 설정하며, 설정한 byte에 도달하면 새로운 세그먼트가 생성되고 기존 세그먼트는 읽기 전용 상태가 되고 retention에 의해 삭제 될 수 있음
    • 1GB 가 기본값
  • segment.ms
    • 세그먼트가 롤링되는 시간을 millisecond 단위로 설정, 설정된 시간에 도달하면 새로운 세그먼트가 생성고 기존 세그먼트는 읽기 전용 상태가 되고 retention에 의해 삭제 될 수 있음
    • 7일이 기본값

이외의 토픽 설정 옵션들

세그먼트는 OR 조건으로 segment.ms 또는 segment.bytes에 도달하면 새로운 세그먼트를 생성함
읽기 전용 세그먼트만 retention 설정에 의해 삭제 될 수 있음

모두 기본값을 사용한다면 log 데이터는 어떻게 삭제 될까??

  1. 최초 세그먼트 생성(Active Segment)
  • 세그먼트가 생성되어 log에 데이터가 기록됨
  1. 세그먼트 롤링 조건에 도달
  • 세그먼트가 1GB에 도달했거나, 생성한지 7일이 지나 새로운 세그먼트(Active segment)가 생성되고 기존 세그먼트는 읽기 전용 상태로 변경
  1. retention 조건에 도달
  • 읽기 전용 세그먼트가 생성된지 7일이 초과한 경우 오래된 세그먼트 부터 삭제됨

    retention.byte를 설정하지 않아 읽기 전용 segment가 1GB 단위로 생성되며 용량 제한 없이 7일까지 유지되다가 삭제되어 용량 제한이 필요한 상황이라면 적절하지 않음

용량 제한 및 데이터 저장 시간 설정이 필요한 상황이라면??

용량 제한이 필요하다면 segment.byte의 최소 2배 정도로 retention.byte를 설정하고
저장 시간을 설정해야한다면 segment.ms의 최소 3배 정도로 retention.ms를 설정하는게 좋지 않을까 생각한다.
물론 데이터의 양에 따라 다르겠지만 세그먼트를 너무 자주 롤링하게 되면 성능에 영향을 줄 수 있고 또 너무 늦게 롤링을 하게되면 의도하는 삭제 주기와 용량보다 늦게 데이터가 삭제될 수 있다 생각한다.
좀 더 운영을 해보면서 내용을 추가하도록 하겠습니다.

profile
서버 개발자

0개의 댓글