07.KafkaLogFile

Topic, Partition, Segment

Physical View

  • Partition์€ Broker๋“ค์— ๋ถ„์‚ฐ๋˜๋ฉฐ, ๊ฐ Partition์€ Segment File๋“ค๋กœ ๊ตฌ์„ฑ๋จ

  • Rolling Strategy : log.segment.bytes(default 1 GB), log.roll.hours(default 168 hours)

Segment

Kafka Log Segment File Directory

๊ฐ Broker์˜ log.dirs ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ •์˜

  • Kafka Log Segment File์€ Data File์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•จ

  • Segment 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 0์€ 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๋ถ€ํ„ฐ 00000000000007735203 offset๊นŒ์ง€์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅ/๊ด€๋ฆฌ (00000000000007735203 = 00000000000007735204 -1)

Partition ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ๋“ค์˜ ํƒ€์ž…

ํ™•์žฅ์ž ํ˜น์€ ํŒŒ์ผ๋ช…์œผ๋กœ ๊ตฌ๋ถ„ํ•จ

Partition ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋˜๋Š” Files Types ์€ ์ตœ์†Œ 4๊ฐ€์ง€ (default)

  • 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 ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ๊ธฐ๋Š” Files Types

  • Idempotent Producer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด โ†’ .snapshot

  • Transactional Producer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด โ†’ .txnindex

Log Segment File์˜ ํŠน์ง•

์ฒซ๋ฒˆ์งธ๋กœ ์ €์žฅ๋˜๋Š” ๋ฉ”์‹œ์ง€์˜ Offset์ด ํŒŒ์ผ๋ช…์ด ๋จ

Partition์€ ํ•˜๋‚˜ ์ด์ƒ์˜ Segment File๋กœ ๊ตฌ์„ฑ

Log Segment File์˜ ํŒŒ์ผ๋ช…์€ ํ•ด๋‹น Segment File์— ์ €์žฅ๋œ ์ฒซ๋ฒˆ์งธ ๋ฉ”์‹œ์ง€์˜ Offset

Log Segment File Rolling

์•„๋ž˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํ•ด๋‹น๋˜๋ฉด ์ƒˆ๋กœ์šด Segment File๋กœ Rolling

  • log.segment.bytes (default: 1 GB)

  • log.roll.ms (default: 168 ์‹œ๊ฐ„)

  • log.index.size.max.bytes (default: 10 MB)

  • __consumer_offset (Offset Topic)์˜ 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๋Š” ์ด ์‹œ์  ์ดํ›„์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์†์‹ค๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ

Last updated