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