Topic&Partition

์นดํ”„์นด์˜ **ํ† ํ”ฝ (Topic)**๊ณผ **ํŒŒํ‹ฐ์…˜ (Partition)**์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํ™•์žฅ์„ฑ, ๊ณ ๊ฐ€์šฉ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ์„ ์œ„ํ•œ ์„ค๊ณ„์˜ ๊ทผ๊ฐ„์ž…๋‹ˆ๋‹ค.


ํ† ํ”ฝ (Topic): ๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ๋ถ„๋ฅ˜์™€ ๋ถˆ๋ณ€์˜ ์ŠคํŠธ๋ฆผ

ํ† ํ”ฝ์€ ์นดํ”„์นด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ์ฑ„๋„์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋“€์„œ๊ฐ€ ํŠน์ • ์ฃผ์ œ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ , ์ปจ์Šˆ๋จธ๊ฐ€ ๊ทธ ์ฃผ์ œ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

1. ์ŠคํŠธ๋ฆผ๊ณผ ๋กœ๊ทธ์˜ ๊ฐœ๋…

  • ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ: ํ† ํ”ฝ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๋ณด๋‹ค๋Š” **์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ(Event Stream)**์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—ฐ์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ ˆ์ฝ”๋“œ(๋ฉ”์‹œ์ง€)์˜ ํ๋ฆ„์ž…๋‹ˆ๋‹ค.

  • ๋ถˆ๋ณ€์˜ ๋กœ๊ทธ: ํ† ํ”ฝ์— ๊ธฐ๋ก๋œ ๋ ˆ์ฝ”๋“œ๋Š” **๋ถˆ๋ณ€(Immutable)**์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•œ๋ฒˆ ์ €์žฅ๋˜๋ฉด ์ˆ˜์ •๋˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ์‚ฝ์ž…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปจ์Šˆ๋จธ๊ฐ€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๋”๋ผ๋„ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ , ์ •ํ•ด์ง„ ๋ณด์กด ์ •์ฑ…์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด ์ง€๋‚˜์•ผ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•๋ถ„์— ์—ฌ๋Ÿฌ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด ๋…๋ฆฝ์ ์œผ๋กœ, ํ˜น์€ ๋‚˜์ค‘์— ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ํ† ํ”ฝ๊ณผ ์ˆœ์„œ ๋ณด์žฅ์˜ ํ•œ๊ณ„

ํ† ํ”ฝ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ, ํ† ํ”ฝ ์ „์ฒด ๋ ˆ์ฝ”๋“œ ๊ฐ„์˜ ์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜ ๋‚ด๋ถ€์—์„œ๋งŒ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.


ํŒŒํ‹ฐ์…˜ (Partition): ๋ฌผ๋ฆฌ์  ๋ถ„ํ• , ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„

ํŒŒํ‹ฐ์…˜์€ ํ† ํ”ฝ์„ ๊ตฌ์„ฑํ•˜๋Š” ์‹ค์ œ ๋ฌผ๋ฆฌ์  ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ์นดํ”„์นด๊ฐ€ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋น„๋ฐ€์ด ์ด ํŒŒํ‹ฐ์…˜์— ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋ฌผ๋ฆฌ์  ์ €์žฅ ๊ตฌ์กฐ: ์ˆœ์ฐจ ๋กœ๊ทธ์™€ ์„ธ๊ทธ๋จผํŠธ

  • ์ˆœ์ฐจ์  ๋กœ๊ทธ (Append-Only Log): ๊ฐ ํŒŒํ‹ฐ์…˜์€ ๋””์Šคํฌ์— ์ €์žฅ๋˜๋Š” ๋…๋ฆฝ์ ์ธ ์ˆœ์ฐจ์ (Ordered) ๋กœ๊ทธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๋Š” ํ•ญ์ƒ ๋กœ๊ทธ์˜ **๋งจ ๋์— ์ถ”๊ฐ€(Append-Only)**๋ฉ๋‹ˆ๋‹ค. ์ด ์ˆœ์ฐจ ์“ฐ๊ธฐ ๋ฐฉ์‹์ด ๋””์Šคํฌ I/O ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ์›๋ฆฌ์ž…๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ ์„ธ๊ทธ๋จผํŠธ (Log Segments): ํŒŒํ‹ฐ์…˜์˜ ๋ฌดํ•œํ•œ ๋กœ๊ทธ๋Š” ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋กœ๊ทธ ์„ธ๊ทธ๋จผํŠธ๋ผ๋Š” ์ž‘์€ ํŒŒ์ผ๋“ค๋กœ ๋ถ„ํ• ๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์„ธ๊ทธ๋จผํŠธ ๋‹จ์œ„๋กœ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ (Retention Policy) ์••์ถ•๋ฉ๋‹ˆ๋‹ค (Log Compaction).

2. ์˜คํ”„์…‹ (Offset): ๋ถˆ๋ณ€์˜ ๋ ˆ์ฝ”๋“œ ์‹๋ณ„์ž

  • ์œ„์น˜ ์‹๋ณ„: ํŒŒํ‹ฐ์…˜ ๋‚ด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์˜คํ”„์…‹์ด๋ผ๋Š” ๊ณ ์œ ํ•œ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด ์˜คํ”„์…‹์€ ๋ ˆ์ฝ”๋“œ์˜ ์ ˆ๋Œ€์ ์ด๊ณ  ๋ถˆ๋ณ€์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ์ปจ์Šˆ๋จธ ์ปค์„œ: ์ปจ์Šˆ๋จธ๋Š” ์ž์‹ ์ด ํŒŒํ‹ฐ์…˜์—์„œ ์–ด๋””๊นŒ์ง€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์—ˆ๋Š”์ง€ ์ด ์˜คํ”„์…‹์„ ์ถ”์ ํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ **์ปค๋ฐ‹(Commit)**ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปจ์Šˆ๋จธ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋งˆ์ง€๋ง‰ ์ฒ˜๋ฆฌ ์œ„์น˜๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณต๊ตฌํ•˜์—ฌ ์ž‘์—…์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๊ณ ๊ฐ€์šฉ์„ฑ: ๋ฆฌ๋”, ํŒ”๋กœ์›Œ, ๊ทธ๋ฆฌ๊ณ  ISR

ํŒŒํ‹ฐ์…˜์€ ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ธŒ๋กœ์ปค์— ๋ณต์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋ณต์ œ ๊ณ„์ˆ˜ ์„ค์ •).

  • ๋ฆฌ๋” (Leader): ๋ณต์ œ๋ณธ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฆฌ๋”๊ฐ€ ๋˜์–ด ๋ชจ๋“  ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ํŒ”๋กœ์›Œ (Follower): ๋‚˜๋จธ์ง€๋Š” ํŒ”๋กœ์›Œ๊ฐ€ ๋˜์–ด ๋ฆฌ๋”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜์—ฌ ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • ISR (In-Sync Replica): ๋ฆฌ๋”์™€ ์™„๋ฒฝํ•˜๊ฒŒ ๋™๊ธฐํ™”๋˜์–ด ์žˆ๋Š” ํŒ”๋กœ์›Œ๋“ค์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋“€์„œ๊ฐ€ ๋†’์€ ์•ˆ์ •์„ฑ์œผ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ, ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋Š” ISR์˜ ๋ชจ๋“  ๋ณต์ œ๋ณธ์— ๊ธฐ๋ก๋˜์–ด์•ผ๋งŒ ์„ฑ๊ณต์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋”์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ISR ๋ฉค๋ฒ„ ์ค‘์—์„œ๋งŒ ์ƒˆ๋กœ์šด ๋ฆฌ๋”๊ฐ€ ์„ ์ถœ๋˜์–ด ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

4. ํŒŒํ‹ฐ์…”๋‹ ์ „๋žต: ์ˆœ์„œ ๋ณด์žฅ์˜ ์—ด์‡ 

ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ, ํŒŒํ‹ฐ์…”๋„ˆ(Partitioner)๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์–ด๋А ํŒŒํ‹ฐ์…˜์— ์ €์žฅํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ฑด
์ „๋žต
๋ชฉ์ 

ํ‚ค(Key) ์ง€์ •

ํ•ด์‹œ ๊ธฐ๋ฐ˜ ํŒŒํ‹ฐ์…”๋‹

ํ‚ค ๋‹จ์œ„ ์ˆœ์„œ ๋ณด์žฅ

๋ ˆ์ฝ”๋“œ์˜ ํ‚ค๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ํŒŒํ‹ฐ์…˜ ์ˆ˜๋ฅผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’์œผ๋กœ ๊ฒฐ์ •. ๋™์ผ ํ‚ค๋Š” ํ•ญ์ƒ ๋™์ผ ํŒŒํ‹ฐ์…˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ: UserID ๊ธฐ๋ฐ˜ ์ˆœ์„œ ๋ณด์žฅ)

ํ‚ค ๋ฏธ์ง€์ • (null)

๋ผ์šด๋“œ ๋กœ๋นˆ ํŒŒํ‹ฐ์…”๋‹

๋ถ€ํ•˜ ๊ท ๋“ฑ ๋ถ„์‚ฐ

ํŒŒํ‹ฐ์…˜์— ๋ฉ”์‹œ์ง€๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ณ ๋ฅด๊ฒŒ ๋ถ„๋ฐฐํ•˜์—ฌ ๋ธŒ๋กœ์ปค ๊ฐ„์˜ ๋ถ€ํ•˜๋ฅผ ๊ท ํ˜• ์žˆ๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.


์ปจ์Šˆ๋จธ ๊ทธ๋ฃน๊ณผ ๋™์  ํ• ๋‹น (๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ)

ํŒŒํ‹ฐ์…˜์€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์˜ ์ตœ์†Œ ๋‹จ์œ„์ด๋ฏ€๋กœ, ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์˜ ํ™•์žฅ์„ฑ๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

1. ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน๊ณผ ํŒŒํ‹ฐ์…˜ ๋งคํ•‘

  • 1:1 ๋งคํ•‘ ์›์น™: ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์—์„œ ๊ฐ ํŒŒํ‹ฐ์…˜์€ ์˜ค์ง ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ ์ธ์Šคํ„ด์Šค์—๊ฒŒ๋งŒ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

  • ์ตœ๋Œ€ ๋ณ‘๋ ฌ์„ฑ: ํ† ํ”ฝ์˜ ์ตœ๋Œ€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋Ÿ‰์€ ํŒŒํ‹ฐ์…˜ ์ˆ˜์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜ ์ˆ˜๋ณด๋‹ค ์ปจ์Šˆ๋จธ ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด, ๋‚จ๋Š” ์ปจ์Šˆ๋จธ๋Š” ์œ ํœด ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

2. ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ (Rebalancing)

๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์€ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์˜ ๋ฉค๋ฒ„์‹ญ์ด๋‚˜ ๊ตฌ๋… ์ค‘์ธ ํŒŒํ‹ฐ์…˜ ์ˆ˜์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ๋•Œ, ํŒŒํ‹ฐ์…˜์˜ ์†Œ์œ ๊ถŒ์„ ๋™์ ์œผ๋กœ ์žฌ๋ถ„๋ฐฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

  • ๋ฐœ์ƒ ์กฐ๊ฑด: ์‹ ๊ทœ ์ปจ์Šˆ๋จธ ์ถ”๊ฐ€, ๊ธฐ์กด ์ปจ์Šˆ๋จธ ์ดํƒˆ (์žฅ์•  ๋˜๋Š” ์ •์ƒ ์ข…๋ฃŒ), ๊ตฌ๋… ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜ ์ˆ˜ ๋ณ€๊ฒฝ.

  • ์ž‘๋™ ์˜ํ–ฅ: ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ง„ํ–‰๋˜๋Š” ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ์ปจ์Šˆ๋จธ๋Š” ๋ฉ”์‹œ์ง€ ์†Œ๋น„๋ฅผ ์ผ์‹œ ์ค‘๋‹จํ•˜๊ณ , ํŒŒํ‹ฐ์…˜ ํ• ๋‹น์„ ์žฌ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ง€์—ฐ(Lag)์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ, ์นดํ”„์นด ์šด์˜์—์„œ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์™„๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Last updated