[kafka] Log Segment File 디렉토리

2022. 6. 19. 15:28[ 맛보기 ]/[ Kafka ]

Broker의 설정 파일(server.properties)에 log.dirs 파라미터를 통해 Segment File이 생성되는 위치를 조정할 수 있다. (콤마를 통해 여러 디렉토리 설정 가능) 만약 topic1이라는 이름의 Topic과 Partition 0번이 있다고 가정하면, log.dirs에 명시된 위치 중 하나가 결정되고 그 하위 디렉토리에 "Topic명-Partition번호"(topic1-0) 형태의 하위 디렉토리가 생성되며 해당 디렉토리에 Segement File이 기록된다.

 

Log File들의 확장자와 파일명에는 의미가 있다.

 

 

예를들어 위와 같이 00000000000000000217.* 이라는 파일명이 있으면 해당 파일은 00000000000000000217 offset부터 기록하고 있는 Segment File임을 의미한다. Segment file이 롤링될 때 해당 위치부터 끊어진 것으로 간주하면 된다. 그러다가 00000000000000004411.* 파일이 생성되었으므로 00000000000000000217 파일에는 00000000000000000217부터 00000000000000004410 까지의 Offset에 해당하는 메시지가 기록되어 있을 것이다.

 

Partition 디렉토리에 기본적으로 생성되는 파일 확장자

- .log : Log Segment File로 실제 전송되는 메시지와 메타데이터를 저장한다.

- .Index : Index File로 각 메시지의 Offset을 Log Segment 파일의 Byte 위치를 기록한다.

- .timeindex : 메시지의 timestamp를 기반으로 메시지를 검색할 수 있도록 하기 위해 사용된다.

- leader-epoch-checkpoint : Leader가 변경이 되었을 때의 정보와 Offset 정보를 저장한다.

 

특수한 경우에 생성되는 파일 확장자

- .snapshot : 메시지 순서를 보장하기 위해 사용하는 Idempotent Producer를 사용할 경우

- .txnindex : Transactional Producer를 사용할 경우

 

 

 

Partition은 여러개의 Segment File로 구성된다. (롤링)

 

 

 

 

- log.segment.bytes (기본값 1GB) : 해당 값 이상이 되면 새로운 Segment File을 생성

- log.roll.ms (기본값 168시간, 7일) : 해당 값 이상이 되면 새로운 Segment File을 생성

- log.index.size.max.bytes (기본값 10MB) : index 파일을 롤링할 단위 설정

 

* __consumer_offset 토픽은 Rolling 파라미터를 별도로 관리한다.

- offsets.topic.segment.bytes (기본값 100MB)

 

 

 

cf. Checkpoint File

각 Broker에는 2개의 CHeckpoint File이 존재한다. 그중에서도 log.dirs에 명시한 디렉토리에 생성되는 Checkpoint File은 다음과 같다.

 

1) replication-offset-checkpoint

가장 최근에 Commit된 메시지의 ID인 High Water Mark를 기록한다. 시작할 때 follower가 이를 읽어서 commit 되지 않은 메시지를 삭제한다.(Truncate: 일부삭제)

 

2) recovery-point-offset-checkpoint

데이터가 디스크로 flush 된 지점을 기록한다. 복구 중에 Broker는 이 시점 이후의 메시지가 손실되었는지를 확인한다.

 

 

 

'[ 맛보기 ] > [ Kafka ]' 카테고리의 다른 글

[kafka] Kafka의 주요 구성 요소 (Broker, Zookeeper)  (0) 2022.06.08