카프카 로그의 파티션과 세그먼트
카프카의 로그 메세지는 실제로 segment로 저장
파티션은 단순히 파일 디렉토리로만 되어 있고, 해당 파티션 디렉토리에 메세지 저장 segment를 file로 가지는 형태
파티션은 여러개의 segment로 구성되며, 개별 segment는 데이터 용량이 차거나 일정 시간이 경과하면 close되고 새로운 segment를 생성 → 새로운 데이터 저장
segment는 close되면 더 이상 브로커가 write하지 않고 read-only상태로 변경
브로커는 여러 개의 segment중에 단 하나의 active segment에만 write/read 수행
즉, 하나의 파티션은 하나의 active segment를 가짐
segment의 저장 크기와 roll 관련 config
브로커 레벨 config
파티션 디렉토리내의 segment와 index 파일 구성
topic을 생성하면 파티션 디렉토리내에 메세지 내용을 가지는 segment와 offset위치 byte정보를 가지는 index 파일, record 생성 시간에 따른 위치 byte 정보를 가지는 timeindex 파일로 구성
예시(pizza-topic-stest)
메세지 로그 segment와 Index, TimeIndex
.index 파일 예시는 18 offset의 byte position을 가지고 있으며 offset 0 → offset 18 까지는 4334 byte 떨어져 있음을 의미 .timeIndex 에서는 시간 단위로 offset을 기록하고 해당 offset을 .index파일에서 위치를 참조하는 방식
log.index.interval.bytes
에 설정된 값만큼의 segment bytes가 만들어질 때마다 해당 offset에 대한 byte position 정보를 기록Segment 파일의 생명 주기
default = delete
)카프카 브로커가 오래된 메세지를 관리하기 위한 정책
log.cleanup.policy
로 설정(Topic 레벨에서 설정하기 위해서는 cleanup.policy
로 설정)
log.cleanup.policy = delete
→ segment를 log.retention.hours, log.retention.bytes
설정 값에 따라 삭제
log.cleanup.policy = delete
config
log.cleanup.policy = compact
→ segment를 key 값 레벨로 가장 최신의 메세지만 유지하도록 segment 재구성
log.cleanup.policy = [delete, compact]
→ compact, delete 동시 적용
Log Compaction이란
log.cleanup.policy = compact
설정 시 segment의 key값에 따라 가장 최신의 메세지로만 compact하게 segment 재구성Log Compaction 수행
Log Compaction 수행 이후
Log Compaction 수행 시점
log.cleaner.min.cleanable.ratio
이상이고 메세지가 생성된 지 log.cleaner.min.compaction.lag.ms
이 지잔 dirty 메세지에 대해 수행log.cleaner.max.compaction.lag.ms
이 지난 dirty 메세지에 대해 수행Compaction 수행 시 메세지의 삭제