본문 바로가기

Kafka

[Kafka] Kafka Log File

* Topic, Partition, Segment 구조(Multi Partition을 통한 병렬 처리 구조일 경우)

  • Partition은 Broker들에게 분산되며, 각 Partition은 Segment File들로 구성된다.
  • Rolling Strategy: log.segment.bytes(default 1GB), log.roll.hours(default 168 hours)

Log Segment File

  • Data File이라고 부른다.
  • 첫 번째로 저장되는 데이터의 Offset이 파일명이 된다.
  • Segment File이 생성되는 위치는 각 Broker의 server.properties 파일 안의 log.dirs 파라미터로 정의한다. -> 콤마를 사용하여 여러 디렉터리 지정 가능
    • log.dirs=/data/kafka/kafka-log-a, /data/kafka/kafka-log-b
  • 각 Topic과 Partition은 log.dirs 아래 하위 디렉터리로 구성된다.
    • Topic 이이 test 1일 때, /data/kafka/kafka-log-a/test 1 디렉터리로 생성된다.
  • 해당 디렉터리에 생성되는 파일
    • 0000000012345.index 
    • 0000000012345.timeindex
    • 0000000012345.log
    • 0000000092801.index
    • 0000000092801.timeindex
    • 0000000092801.log
    • leader-epoch-checkpoint

* 0000000012345 파일들에는 0000000012345 offset부터0000000092800 offset까지의 데이터를 저장/관리

  • 기본으로 Partition 디렉터리에 생성되는 File Type
    • .log(Log Segment File) -> 데이터와 metadata 저장
    • .index(Index File) -> 각 데이터의 Offset을 Log Segment File의 Byte 위치에 매핑
    • .timeindex(Time-based Index File) -> 각 데이터의 timestamp를 기반으로 데이터를 검색하는 데 사용
    • leader-epoch-checkpoint File -> Leader Epoch 관련 Offset 정보를 저장
  • 특정한 Producer 파라미터를 사용하면 Partition 디렉터리에 생기는 File Type
    • .snapshot -> Idempotent 옵션을 활성화한 Producer 사용 시 생성된다.
    • .txnindex -> Transactional Producer 사용 시 생성된다.
  • Log Segment File 파라미터
log.segment.bytes (default: 1GB) 설정 값을 넘어가면 자동으로 새로운 Segment 생성
log.roll.ms (default: 168 시간) 설정 시간을 넘어가면 자동으로 새로운 Segment 생성
log.index.size.max.bytes (default: 10 MB) 설정 Index 최대 크기를 넘어갈 때

Checkpoint File

  • 각 Broker에는 2 개의 Checkpoint File이 존재한다.
  • log.dirs 디렉터리에 위치한다.
  • File 종류
    • replication-offset-checkpoint -> 마지막으로 Commit 된 데이터의 ID인 High Water Mark를 저장한다. 해당 정보를 사용하여 Follower 가 Commit 되지 않은 메시지를 Truncate 한다.
    • recovery-point-offset-checkpoint -> 데이터가 디스크로 Flush 된 지점을 저장한다. 복구 중 Broker는 해당 시점 이후의 데이터가 손실되었는지 판단한다.

'Kafka' 카테고리의 다른 글

[Spring + Kafka] 간단 실습  (0) 2022.11.26
[Kafka] Exactly Once Semantics(EOS)  (0) 2022.10.17
[Kafka] Partition Assignment Strategy  (0) 2022.10.14
[Kafka] Replication (2)  (1) 2022.10.13
[Kafka] Replication (1)  (0) 2022.10.12