04.LogRetention,CleanupPolicy

Log ํŒŒ์ผ ๊ด€๋ฆฌ

Log๋Š” Consume๋˜์–ด๋„ ์ง€์šฐ์ง€ ์•Š์Œ

  • ๋งŽ์€ Consumer๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ๊ฐ„์— Log ๋ฐ์ดํ„ฐ๋ฅผ Consume ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

  • Broker ํ˜น์€ Topic ๋‹จ์œ„๋กœ Cleanup ์ •์ฑ…์„ ์„ค์ •ํ•จ

  • log.cleanup.policy ํŒŒ๋ผ๋ฏธํ„ฐ

    • delete

    • compact

    • delete,compact

  • ํ˜„์žฌ Active Segment์˜ Log๋Š” cleanup ๋Œ€์ƒ์ด ์•„๋‹˜

Delete Cleanup Policy

Log Cleaner Thread๊ฐ€ Segment File์„ ์‚ญ์ œ

  • log.cleanup.policy ํŒŒ๋ผ๋ฏธํ„ฐ

    • delete

  • log.retention.ms : log ๋ณด๊ด€ ์ฃผ๊ธฐ (๊ธฐ๋ณธ๊ฐ’ : 7 ์ผ)

  • log.retention.check.interval.ms : log segment๋ฅผ ์ฒดํฌํ•˜๋Š” ์ฃผ๊ธฐ (๊ธฐ๋ณธ๊ฐ’ : 5 ๋ถ„)

  • segment ํŒŒ์ผ์— ์ €์žฅ๋œ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ log.retention.ms ๋ณด๋‹ค ์˜ค๋ž˜๋œ segment ๋ฅผ ์‚ญ์ œ

Topic์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•

retention.ms ๋ฅผ ํ™œ์šฉ(์šด์˜ํ™˜๊ฒฝ์—์„œ๋Š” ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)

  1. Producer์™€ Consumer๋ฅผ ๋ชจ๋‘ shutdown

  2. ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น Topic์˜ retention.ms๋ฅผ 0์œผ๋กœ ์…‹ํŒ…

    [kafka-config.sh](<http://kafka-config.sh/>) --zookeeper ${zookeeper ip address} --alter --entity-name
    topics --entity-name hkim_topic --add-config retention.ms=0
  3. Cleanup Thread ๊ฐ€ ๋™์ž‘ํ•  ๋™์•ˆ ๋Œ€๊ธฐ (๊ธฐ๋ณธ๊ฐ’ 5๋ถ„ ๋งˆ๋‹ค ๋™์ž‘)

  4. ๋ฉ”์‹œ์ง€ ์‚ญ์ œ ํ™•์ธ ํ›„, ์›๋ž˜ ์„ค์ •์œผ๋กœ ์›๋ณต

    [kafka-config.sh](<http://kafka-config.sh/>) --zookeeper ${zookeeper ip address} --alter --entity-name
    topics --entity-name hkim_topic --delete-config [retention.ms](<http://retention.ms/>)

์ฃผ์˜) Log File ์ž์ฒด๋ฅผ ์ ˆ๋Œ€๋กœ ์ง์ ‘ ์‚ญ์ œํ•˜๋ฉด ์•ˆ ๋จ -> ๋ฐ˜๋“œ์‹œ ๋ช…๋ น์–ด๋กœ ์ˆ˜ํ–‰

Compact Cleanup Policy

๊ฐ Key์˜ ์ตœ์‹  Value๋งŒ์„ ์œ ์ง€

  • Key๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Custom Partitioner๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ, ํŠน์ • Key๋ฅผ ๊ฐ€์ง€๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋Š” ๋™์ผํ•œ Partition์œผ๋กœ send ๋จ

  • Compact(์••์ถ•) ์ •์ฑ…์€ Partition๋ณ„๋กœ ํŠน์ • Key์˜ ์ตœ์‹  Value๋งŒ ์œ ์ง€ํ•˜๋ฉฐ ์••์ถ•

  • ๋™์ผํ•œ Key๋ฅผ ๊ฐ€์ง„ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‹ค๋ฅธ Partition์— ์žˆ๋Š” ๊ฒฝ์šฐ, ๋™์ผํ•œ Key๋ฅผ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์„ ์ˆ˜ ์žˆ์Œ(์šด์˜ ์ค‘ ํŒŒํ‹ฐ์…˜์„ ์ฆ๊ฐ€ ๋˜๋Š” ์‚ญ์ œ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ ๊ฐ€๋Šฅ)

    • ์ค‘๋ณต ์ œ๊ฑฐ์šฉ ๊ธฐ์ˆ ์ด ์•„๋‹˜

Log Compaction

Key๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™

์••์ถ•์ด ์—†์œผ๋ฉด Consumer๋Š” ํ•ญ์ƒ ์ „์ฒด ๋กœ๊ทธ๋ฅผ ์ฝ๊ณ  ๊ฒฐ๊ตญ ๊ฐ Key์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์ตœ์‹  ์ƒํƒœ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋กœ๊ทธ ์••์ถ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Consumer๊ฐ€ ์ตœ์ข… ์ƒํƒœ์— ๋” ๋นจ๋ฆฌ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ(์˜ˆ, __consumer_offsets Topic)

Log Compaction ๋™์ž‘ ์›๋ฆฌ

Log Compaction ์„ค์ •

  • log.cleaner.min.cleanable.ratio (๊ธฐ๋ณธ๊ฐ’ : 0.5)

    • Head ์˜์—ญ ๋ฐ์ดํ„ฐ๊ฐ€ Tail ์˜์—ญ๋ณด๋‹ค ํฌ๋ฉด(๊ธฐ๋ณธ๊ฐ’ 50%), Cleaner ์‹œ์ž‘

  • log.cleaner.io.max.bytes.per.second (๊ธฐ๋ณธ๊ฐ’ : ๋ฌด์ œํ•œ)

    • Log Cleaner์˜ Read/Write ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œํ•œํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ๋ณดํ˜ธ ๊ฐ€๋Šฅ

  • ๋™์ผํ•œ Key๋ฅผ ๊ฐ–๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋งค์šฐ ๋งŽ์€ ๊ฒฝ์šฐ, ๋” ๋น ๋ฅธ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ์•„๋ž˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•จ

    • log.cleaner.threads (๊ธฐ๋ณธ๊ฐ’ : 1) core ๊ฐœ์ˆ˜๋งŒํผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

    • log.cleaner.dedupe.buffer.size (๊ธฐ๋ณธ๊ฐ’ : 134,217,728)

Tombstone Message

  • Compaction ์‚ฌ์šฉ์‹œ์— Key๋กœ K๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์šฐ๋ ค๋ฉด, ๋™์ผํ•œ Key(K)์— null value๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์‹œ์ง€๋ฅผ Topic์œผ๋กœ ๋ณด๋‚ด๋ฉด ๋จ

  • Consumer๋Š” ํ•ด๋‹น ๋ฉ”์‹œ์ง€๊ฐ€ ์ง€์›Œ์ง€๊ธฐ ์ „์—(๊ธฐ๋ณธ 1 day), ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ consumeํ•  ์ˆ˜ ์žˆ์Œ

  • ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์šฐ๊ธฐ ์ „ ๋ณด๊ด€ ๊ธฐ๊ฐ„(๊ธฐ๋ณธ 1 day)์€ log.cleaner.delete.retention.ms ๋กœ ์กฐ์ •

Last updated