[Kafka] 카프카 로그와 세그먼트

탄니야·2024년 7월 17일
0

Kafka

목록 보기
2/3

로그와 세그먼트

  1. 카프카를 실행할 때 config/server.properties의 log.dir 옵션에 정의한 디렉토리에 데이터가 저장되고 토픽 이름과 파티션 번호의 조합으로 하위 디텍토리를 생성하여 데이터를 저장한다.

  2. 예를들어 hello.kafaka 라는 토픽이 있다ㅕ면 hello.kafaka-0 폴더를 확인 할 수 있다.(토픽이름 + 파티션번호)

  3. 해당폴더에 들어가 데이터를 살펴보면, log, inde, timeindex파일을 확일 할 수 있다.
    log: 메시지와 메타데이터를 저장
    index: 메시지의 오프셋을 인덱싱한 정보를 저장
    timeindex: 메시지에 포함된 timestamp값을 기준으로 인덱싱한 정보가 저장

  4. 아래와 같은 로그파일을 확인 할 수 있는데, 첫번째 로그에는 0~9까지의 오프셋, 두번째 로그에는 10~19, 세번째는 20부터의 오프셋을 가지고 있다고 볼 수 잇다.
    00000000000000000000.log 00000000000000000010.log 00000000000000000020.log

log.segment.bytes:바이트 단위의 최대 세그먼트 크기지정 (기본값 1GB)
log.roll.ms(hours):세그먼트가 신규 생성된 이후 다음 파일로 넘어가는 시간주기(기본값 7일)

액티브 세그먼트

  • 가장 마지막세그먼트 파일(쓰기가 일어나고 있는 파일)을 말한다.
    액티브 세그먼트는 브로커의 삭제 대상에 포함되지 않으며, 액티브 세그먼트가 아닌 세그먼트는 retention 옵션에 따라 삭제 대상으로 지정된다.

데이터 정리 정책(delete와 compact)

cleanup.policy=delete

Delete 방식은 시간 또는 크기에 따라 세그먼트 단위로 삭제하는 정책

  • 카프카에서 데이터는 세그먼트 단위로 삭제가 발생하기 때문에 로그 단위(레코드 단위)로 개별삭제는 불가능하다. 또한, 로그의 메시지 키, 메시지 값, 오프셋, 헤더 등 이미 적재된 데이터에 대해서 수정또한 불가능하기 떄문에 데이터를 적재할 때(프로듀서) 또는 데이터를 사용할 때(컨슈머) 데이터를 검증하는 것이 좋다.
    -retention.ms(minutes,hours):세그먼트를 보유할 최대기간(기본값7일)
    -rentention.bytes:파티션당 로그 적재 바이트 값. 기본값은 -1(지정X)
    -log.retention.check.interval.ms:세그먼트가 삭제 영역에 들어왔는지 확인하는 간격.(기본값5분)

cleanup.policy=compact

Compact 방식은 시간 또는 크기에 따라 세드먼트 내 동일 Key 오래된 레코드를 삭제하는 정책

  • 여기서 압축이란 메시지 키 별로 해당 메시지의 키의 레코드 중 오래된 데이터를 삭제하는 정책을 뜻함.
    delete정책과 다르게 일부 레코드만 삭제가 될 수 있으며 압축은 액티브 세그먼트를 제외한 데이터가 대상이다.

  • 테일/헤드영역, 클린/더티 로그
    -테일영역 : 압축 정책에 의해 압축이 안료된 레코드들.클린(clean)로그라고 부른다. 중복 메시지 키가 없다.
    -헤드영역 : 압축 정책이 되기 전 레코드들. 더티(dirty)로그 라고 부른다.
    중복 메시지 키가 있다.

  • min.cleanable.dirty.ratio
    데이터의 압축 시작 시점은 해당 옵션값을 따른다.
    옵션값은 액티브 세그먼트를 제외한 세그먼트에 남아 있는 테일영역의 레코드 개수와 헤드영역의 레코드 개수의 비율을 뜻한다.

profile
반갑습니다

0개의 댓글