728x90
반응형
SMALL

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는 이 시점 이후의 메시지가 손실되었는지 여부를 확인할 수 있다.

 

 

728x90
반응형
LIST

'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

+ Recent posts