Partition은 Broker들에 분산되며, 각 Partition은 Segment File들로 구성된다고 했다.

- Segment File은 정해진 기준에 의해 Rolling되는데, 그 전략은 다음과 같다.
- Rolling Strategy: log.segment.bytes (default : 1GB), log.roll.hours (default 168 hours)
Kafka Log Segment File Directory
Segment File은 Log Segment File이라고 부르기도 하며, Data File이라고 부르기도 한다. 이 파일들이 어디에 저장되는지는 각 Broker의 server.properties 파일 안에 log.dirs 파라미터로 정의한다. 아래와 같이 말이다. (Comma로 구분하여 여러 디렉토리 지정이 가능하다)
log.dirs=/data/kafka/kafka-log-a,/data/kafka/kafka-log-b,/data/kafka/kafka-log-c
각 Topic과 그 Partition은 log.dirs 아래에 하위 디렉토리로 구성된다. 예를 들어, test_topic의 Partition 0은 /data/kafka/kafka-log-a/test_topic-0 디렉토리로 생성된다.
Partition 디렉토리 안의 Log File들
파일명은 각자 의미를 가지는데, 다음과 같은 파일들이 있다고 해보자.
test_topic의 Partition 0 디렉토리
$ ls /data/kafka/kafka-log-a/test_topic-0
00000000000000123453.index
00000000000000123453.timeindex
00000000000000123453.log
00000000000007735204.index
00000000000007735204.timeindex
00000000000007735204.log
leader-epoch-checkpoint
- 00000000000000123453.* 파일은 00000000000000123453 offset부터 시작한다는 의미이다.
- 00000000000007735204.* 파일은 00000000000007735204 offset부터 시작한다는 의미이다.
- 그러니까, 00000000000000123453 이 파일은 00000000000000123453 offset 부터 00000000000007735203 offset 까지의 메시지를 저장 및 관리하고 있다.
Partition 디렉토리에 생성되는 File Types는 최소 4가지이다.
- Log Segment File - 메시지와 metadata를 저장 : .log
- Index File - 각 메시지의 Offset을 Log Segment 파일의 Byte 위치에 매핑 : .index
- Time-based Index File - 각 메시지의 timestamp를 기반으로 메시지를 검색하는 데 사용 : .timeindex
- Leader Epoch Checkpoint File - Leader Epoch와 관련 Offset 정보를 저장 : leader-epoch-checkpoint
특별한 Producer 파라미터를 사용하면 Partition 디렉토리에 생기는 File Types
- Idempotent Producer를 사용하면 : .snapshot
- Transactional Producer를 사용하면 : .txnindex
Log Segment File의 특징
이 부분은 이미 알고 있는 내용이다.

- 첫번째로 저장되는 메시지의 Offset이 파일명이 된다.
- Partition은 하나 이상의 Segment File로 구성된다.
Log Segment File을 Rolling 하는 기준을 적용하는 여러 파라미터가 있다.
아래의 파라미터 중 하나라도 해당되면 새로운 Segment File로 Rolling
- log.segment.bytes (default : 1GB)
- log.roll.ms (default : 168 시간)
- log.index.size.max.bytes (default : 10 MB)
그리고, 내부적으로 관리하는 Topic인 __consumer_offsets 의 Segment File Rolling 파라미터는 별도로 존재한다.
- offsets.topic.segment.bytes (default : 100 MB)
Checkpoint File
- 각 Broker에는 2개의 Checkpoint File이 존재한다.
- log.dirs 디렉토리에 위치한다.
- replication-offset-checkpoint : 마지막으로 Commit된 메시지의 ID인 High Water Mark. 시작 시 Follower가 이를 사용하여 Commit되지 않은 메시지를 Truncate한다.
- recovery-point-offset-checkpoint : 데이터가 디스크로 flush된 지점. 복구 중 Broker는 이 시점 이후의 메시지가 손실되었는지 여부를 확인할 수 있다.
'Apache Kafka' 카테고리의 다른 글
p13. Exactly Once Semantics(EOS) (0) | 2025.03.23 |
---|---|
p11. Partition Assignment Strategy (0) | 2025.03.16 |
p10. Consumer Rebalance (0) | 2025.03.16 |
p9. Replica Recovery (0) | 2025.03.16 |
p8. Replica Failure (0) | 2025.03.15 |