카프카를 실행할 때 config/server.properties의 log.dir 옵션에 정의한 디렉토리에 데이터가 저장되고 토픽 이름과 파티션 번호의 조합으로 하위 디텍토리를 생성하여 데이터를 저장한다.
예를들어 hello.kafaka 라는 토픽이 있다ㅕ면 hello.kafaka-0 폴더를 확인 할 수 있다.(토픽이름 + 파티션번호)
해당폴더에 들어가 데이터를 살펴보면, log, inde, timeindex파일을 확일 할 수 있다.
log: 메시지와 메타데이터를 저장
index: 메시지의 오프셋을 인덱싱한 정보를 저장
timeindex: 메시지에 포함된 timestamp값을 기준으로 인덱싱한 정보가 저장
아래와 같은 로그파일을 확인 할 수 있는데, 첫번째 로그에는 0~9까지의 오프셋, 두번째 로그에는 10~19, 세번째는 20부터의 오프셋을 가지고 있다고 볼 수 잇다.
00000000000000000000.log 00000000000000000010.log 00000000000000000020.log
log.segment.bytes:바이트 단위의 최대 세그먼트 크기지정 (기본값 1GB)
log.roll.ms(hours):세그먼트가 신규 생성된 이후 다음 파일로 넘어가는 시간주기(기본값 7일)
Delete 방식은 시간 또는 크기에 따라 세그먼트 단위로 삭제하는 정책
Compact 방식은 시간 또는 크기에 따라 세드먼트 내 동일 Key 오래된 레코드를 삭제하는 정책
여기서 압축이란 메시지 키 별로 해당 메시지의 키의 레코드 중 오래된 데이터를 삭제하는 정책을 뜻함.
delete정책과 다르게 일부 레코드만 삭제가 될 수 있으며 압축은 액티브 세그먼트를 제외한 데이터가 대상이다.
테일/헤드영역, 클린/더티 로그
-테일영역 : 압축 정책에 의해 압축이 안료된 레코드들.클린(clean)로그라고 부른다. 중복 메시지 키가 없다.
-헤드영역 : 압축 정책이 되기 전 레코드들. 더티(dirty)로그 라고 부른다.
중복 메시지 키가 있다.
min.cleanable.dirty.ratio
데이터의 압축 시작 시점은 해당 옵션값을 따른다.
옵션값은 액티브 세그먼트를 제외한 세그먼트에 남아 있는 테일영역의 레코드 개수와 헤드영역의 레코드 개수의 비율을 뜻한다.