02. Topic, Partition, Segment

  • Producer: ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์‚ฐ(Produce)ํ•ด์„œ kafka์˜ Topic์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

  • Consumer: Topic์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ ์†Œ๋น„(Cosume)ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

  • Consumer Group: Topic์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ˜‘๋ ฅํ•˜๋Š” consumer๋“ค์˜ ์ง‘ํ•ฉ

Producer์™€ Consumer์˜ ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹

  • Producer์™€ Consumer๋Š” ์„œ๋กœ ์•Œ์ง€ ๋ชปํ•˜๋ฉฐ, Producer์™€ Consumer๋Š” ๊ฐ๊ฐ ๊ณ ์œ ์˜ ์†๋„๋กœ Commit Log์— Write ๋ฐ Read๋ฅผ ์ˆ˜ํ–‰

  • ๋‹ค๋ฅธ Consumer Group์— ์†ํ•œ Consumer๋“ค์€ ์„œ๋กœ ๊ด€๋ จ์ด ์—†์œผ๋ฉฐ, Commit Log์— ์žˆ๋Š” Event(Message)๋ฅผ ๋™์‹œ์— ๋‹ค๋ฅธ ์œ„์น˜์—์„œ Readํ•  ์ˆ˜ ์žˆ์Œ

Commit Log ์ถ”๊ฐ€๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๋กœ๊ทธ ๋์— ์ถ”๊ฐ€๋˜๊ณ  ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ.

Offset ๊ฐ ํŒŒํ‹ฐ์…˜์—์„œ ๋ถ€์—ฌํ•œ ๋ฉ”์‹œ์ง€์˜ ์ผ๋ จ๋ฒˆํ˜ธ.

  • ์ œ์–ด์— ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”„์…‹์˜ ์ข…๋ฅ˜

    1. Log-End-offset(LEO) : ํŒŒํ‹ฐ์…˜ ๋ฐ์ดํ„ฐ์˜ ๋์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    2. Current Offset : ์ปจ์Šˆ๋จธ๊ฐ€ ์–ด๋””๊นŒ์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์—ˆ๋Š”๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • LEO๋Š” ๋ธŒ๋กœ์ปค์— ์˜ํ•ด ๊ด€๋ฆฌ ๋ฐ ์—…๋ฐ์ดํŠธ.

  • Current Offset์€ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน๋งˆ๋‹ค ๋ณด๊ด€๋˜์–ด ๊ด€๋ฆฌ ๋ฐ ์—…๋ฐ์ดํŠธ.

  • Commit Offset์€ ์ปจ์Šˆ๋จธ์˜ ์˜คํ”„์…‹ ์ปค๋ฐ‹์š”์ฒญ์„ ๊ณ„๊ธฐ๋กœ ์—…๋ฐ์ดํŠธ. ํŠน์ • ํ† ํ”ฝ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ทจ๋“ํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒํ‹ฐ์…˜์— ๋Œ€ํ•œ Commit Offset๋„ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ์ˆซ์ž๋งŒํผ๋งŒ ์กด์žฌํ•œ๋‹ค.

Consumer Lag = LEO์™€ Current Offset์˜ ์ฐจ์ด

Topic

  • Kafka ์•ˆ์—์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ์žฅ์†Œ, ๋…ผ๋ฆฌ์ ์ธ ํ‘œํ˜„

Partition

  • Commit Log, ํ•˜๋‚˜์˜ Topic์€ ํ•˜๋‚˜ ์ด์ƒ์˜ Partition์œผ๋กœ ๊ตฌ์„ฑ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ ๋‹ค์ˆ˜์˜ Partition ์‚ฌ์šฉ

  • Partition ๋ฒˆํ˜ธ๋Š” 0 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ์˜ค๋ฆ„์ฐจ์ˆœ

  • Topic ๋‚ด์˜ Partition ๋“ค์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ž„

  • Partition ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ(Message)๋Š” ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅ(Immutable)

  • Partition์€ Segment File๋“ค๋กœ ๊ตฌ์„ฑ

sagement

  • ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ์‹ค์ œ ๋ฌผ๋ฆฌ File segment file์ด ์ง€์ •๋œ ํฌ๊ธฐ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ง€์ •๋œ ๊ธฐ๊ฐ„๋ณด๋‹ค ์˜ค๋ž˜๋˜๋ฉด ์ƒˆ ํŒŒ์ผ์ด ์—ด๋ฆฌ๊ณ  ๋ฉ”์‹œ์ง€๋Š” ์ƒˆํŒŒ์ผ์— ์ถ”๊ฐ€๋จ

  • Topic ์ƒ์„ฑ์‹œ Partition ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ , ๊ฐ Partition์€ Broker๋“ค์— ๋ถ„์‚ฐ๋˜๋ฉฐ Segment File๋“ค๋กœ ๊ตฌ์„ฑ๋จ

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

Last updated