Home Segment and Log Compaction Policy
Post
Cancel

Segment and Log Compaction Policy

Segment

  • 토픽들은 파티션으로 구성되 있음

  • 파티션들은 segment로 이루어져 있음

  • 오직 기록되고 있는 segment만 활성화 되어있음

  • 세그먼트는 두개의 index(파일)로 구성됨

    • offset : kafka가 읽어야하는 위치를 찾기위한 인덱스

    • timestamp : timestamp를 가진 메시지들을 찾기 위한 인덱스

    • 카프카는 constant time에 데이터를 찾음.

Segment Setting

  • log.segment.bytes : single segment의 최대 byte 사이즈(default 1GB)

    • 값이 작아지면 그만큼 partition당 segment수가 많아진다.

    • log compaction이 더 자주 일어난다.

    • 더 많은 파일들을 열고 있어야하므로 error 발생

  • log.segment.ms : segment를 commit할때 까지 기다리는 시간(segment가 가득 차지 않았을때)

    • default 1 week

    • 값이 작아지면 log compaction이 더 자주 일어난다.

Log Cleanup Policies

  • 많은 Kafka 클러스터들이 데이터를 policy에 따라서 폐기함

  • 이 개념을 log cleanup 이라고 부름

  • 디스크에 있는 데이터 사이즈 조절, 필요없는 데이터 삭제

  • log cleanup은 partition segment에서 일어난다.

  • 크키가 작은 segment들이 많으면 log cleanup이 더 자주 발생한다. (더 많은 CPU, RAM 자원을 소모한다.)

  • Policy1 : log.cleanup.policy=delete (모든 유저 토픽에 대해서 default)

    • data의 age에 따라서 삭제(default 1 week)

    • log의 최대 크기에 따라서 삭제(default -1 == infinite)

  • Policy2 : log.cleanup.policy=compact (__consumer_offsets 토픽에 대한 default)

    • 메시지의 key에 기반하여 삭제

    • active segment 커밋후 중복된 키들을 삭제

    • Segment.ms (default 7 days) : active segment 닫기 까지 기다리는 최대시간

    • Segment.bytes (default 1G) : segement의 최대사이즈

    • Min.compaction.lag.ms (default 0) : message가 compact 되기까지 기다리는 시간

    • Delete.retention.ms (default 24 hours) : compaction으로 데이터가 완전히 삭제되기 전에 삭제된 데이터를 볼수 있는 시간

    • Min.Cleanable.dirty.ratio (default 0.5) : 값이 높을수록 compaction 양이 줄어듬, 더 efficient cleaning, 값이 작을수록 compaction 양은 많아짐, 느린 cleaning

  • Policy3 : log.retention.hours

    • data를 보관하는 시간(default 168시간 - 1주)

    • 길수록 디스크 용량을 많이 차지함

    • 짧을수록 데이터 보관량이 줄어듬

  • Policy4 : log.retention.bytes

    • 각각의 파티션이 가질수있는 최대 용량(bytes), default -1 - infinite
  • 자주 사용되는 조합

    • One week of retention : log.retention.hours=168, log.retention.bytes = -1

    • log.retentions.hours=17520, log.retention.bytes = 524288000

  • Policy5 : unclean.leader.election

    • In Sync Replicas(ISR) 이 죽을경우 다음 옵션이 존재함.

      • unclean.leader.election = false : ISR이 online 될때까지 대기 (default)

      • unclean.leader.election = true : non ISR partitions에 데이터를 producing

    • unclean.leader.election = true 일경우 availability는 증가하지만, ISR로 가야하는 데이터는 사라짐

    • 매우 위험한 세팅이므로, 주의해서 세팅해야함.

    • Use case : metrics collection, log collection, data loss가 acceptable한 경우

This post is licensed under CC BY 4.0 by the author.

Trending Tags