Kafka๋ ๋ฌด์์ผ๊น?
์นดํ์นด๋ ์์ฆ MSA์ ํ์์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ๋๋ค. ์ด ์นดํ์นด๋ ๋ญ๊ณ ์ ํ์ํ ๊น์? ์นดํ์นด๋ ๋งํฌ๋์ธ์ด๋ผ๋ ํ์ฌ์์ ํ๋ฃจ์ 1์กฐ ๋ช์ฒ์ต์ด ๋๋ ๋๋์ ๋ฉ์์ง๋ค์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. ๋งํฌ๋์ธ์ด ์ฌ์ฉ์ค์ด๋ผ๋ฉด ๋์ฉ๋ ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ณ ์์ ์ฑ ๋ํ ๋์ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋๊ฐ ๋ฉ๋๋ค.
์นดํ์นด๋ Messaging Queue๋ผ๊ณ ๋ ํฉ๋๋ค. ๊ฐ๋จํ๊ฒ ๋งํด์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ชฝ์ด ์๊ณ ๊ทธ ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด๊ฐ ์๊ณ , ๋ ๊ทธ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ์ชฝ์ด ์์ ๊ฒ๋๋ค. Messaging Queue๋ Pub/Sub Model์ ์๋ฏธํ๋๋ฐ ์นดํ์นด ๋ง๊ณ ๋ ์ฌ๋ฌ MQ๋ค์ด ์๋๋ฐ ์นดํ์นด์ ์ฐจ๋ณํ๋ ์ ์ ๋ฌด์์ธ์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Messaging Queue: ์นดํ์นด๋ฅผ ์์๋ณด๊ธฐ ์ ์
Publish-Subscribe Model์ ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด๋ด๋ Producer(์์ฐ์), ์๋นํ๋ Consumer(์๋น์) ์ด ๋์ ์ค์ฌํ๋ Broker(๋ธ๋ก์ปค)๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
Topic์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ ํ๋ธ์ ์ด๋ค ์ฑ๋์ ๊ตฌ๋ ํ๋ฉด ํด๋น ์ฑ๋ ๊ด๋ฆฌ์(Producer)๊ฐ ์์์ ์ ๋ก๋ํ๋ฉด ๊ตฌ๋ ์๋ค์๊ฒ ์๋ฆผ์ด ์ค๋ฏ์ด ์ ํ๋ธ ์ฑ๋์ Topic์ด ๋๊ณ , ํด๋น ์ฑ๋์ ๊ตฌ๋ ํ๋ ์ฐ๋ฆฌ๋ Consumer๊ฐ ๋๋ ๊ฒ์ ๋๋ค. ํน์ ์ฌ์ฉ์์๊ฒ ์ ์กํ๋ค๊ณ ์๊ฐ์ ํ ์ ์์ง๋ง Pub/Sub Model์์๋ ๊ตฌ๋ ์๋ค์ ๋ํ ์ ๋ณด๋ ๋ชจ๋ฅด๊ณ Topic์ ๋ํ ์ ๋ณด๋ง ์๊ณ ์์ต๋๋ค.
Topic, Partition ๊ทธ๋ฆฌ๊ณ Segment File
๋ฉ์์ง๋ Topic์ด๋ผ๋ ๊ฐ๋ ์ ํตํด ์นดํ ๊ณ ๋ฆฌํ ๋ฉ๋๋ค. ํน์ Topic์ผ๋ก ๋ค์ด์จ ๋ฉ์์ง๋ค์ Queue ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ ํ๋์ฉ ์์ฐจ์ ์ผ๋ก ์์ด๊ฒ ๋๋๋ฐ ์ด๋ ๋ด๋ถ์๋ ์ข ๋ ์ธ๋ถํ๋ Partition๊ณผ Offset์ด๋ผ๋ ๊ฐ๋ ์ด ์์ต๋๋ค.
Topic์ ์ฌ๋ฌ ๊ฐ์ Partition์ผ๋ก ๋๋ ์ง ์ ์์ต๋๋ค. Partition ๋ด์ ํ์นธ์ ๋ก๊ทธ๋ผ๊ณ ๋ถ๋ฆฌ๊ณ ๋ฉ์์ง๋ Partition์ ์์ฐจ์ ์ผ๋ก ์์ด๊ฒ ๋ฉ๋๋ค. ์์ฐจ์ ์ผ๋ก ์์ด๋ ๋ฉ์์ง๋ค์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๋๊ฒ์ด ๋ฐ๋ก Offset์ ๋๋ค.
์ ํ๋์ ํ ํฝ์ ๋ฉ์์ง๋ฅผ ๋ ์ฌ๋ฌ ๊ฐ์ ํํฐ์ ์ผ๋ก ๋๋๋ ๊ฒ์ผ๊น?
์ผ๋ฐ์ ์ผ๋ก ์นดํ์นด๋ ๋ฉ์์ง์ ์์๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. Partition๊ณผ Offset์ด ์๋๋ฐ ์ ์์๋ฅผ ๋ณด์ฅํ ์ ์์๊น์? ์๊ทธ๋ฐ์ง๋ ์๋ ๋ฉ์์ง๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ์ฅ๋๋์ง ์๋ฉด ์ดํด๊ฐ ๋์ค ๊ฒ๋๋ค.
Partition์ด ํ๋๋ง ์๋ ๊ฒฝ์ฐ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด๋ฉด, ํ๋๋ง ์๋ค๋ฉด ๋์ฉ๋์ ๋ฉ์์ง๋ค์ด ๋ฐํ๋๋ค๋ฉด ์ ์ฅํ๋๋ฐ ๊ฝค๋ ๋ณ๋ชฉ์ด ์๊ธธ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ฌ๋ฌ ๊ฐ๊ฐ ์๋ค๋ฉด ๋ณ๋ ฌ์ ์ผ๋ก ์ ์ฅํ ์ ์์ด์ ํจ์ฌ ์์ํ๊ฒ ์ ์ฅํ ์ ์์ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์นดํ์นด๋ ํ ํฝ์ผ๋ก ๋ฐํ๋ ๋ฉ์์ง๋ ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ๋๋ค Partition์ ์ ์ฅ(๋ฌผ๋ก Partition Key๋ฅผ ์ด์ฉํ๋ฉด ํน์ ํํฐ์ ์ ๋ฉ์์ง๋ฅผ ์ ์ฌ ๊ฐ๋ฅ)๋๋๋ฐ ํด๋น ๋ฉ์์ง๋ค์ ํ์ฒ๋ผ ์์ด๋ ๋ฐฉ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๊ทธ๋์ ํน์ ํํฐ์ ์ ๋ค์ด์จ ๋ฉ์์ง๋ค์ Broker๋ฅผ ํตํด Offset์ด๋ผ๋ ๊ฐ์ด ๊ณ์ ์ฆ๊ฐํ๋ ์ธ๋ฑ์ค๋ฅผ ๋ถ์ฌ๋ฐ์ต๋๋ค.
์ด Offset์ ์ด์ฉํด์ Consumer๋ ํด๋น Topic๋ด์ Partition์ ๋ฉ์์ง๋ฅผ ์ด๋๊น์ง ์ฝ์๋์ง ๋ถ๋งํฌํ์ฌ Consumer๊ฐ ์ฃฝ์๋ค ์ด์๋๋ ๋ค์ ๋ถ๋งํฌ๋ ๋ถ๋ถ๋ถํฐ ์ฝ์ ์๊ฐ ์์ต๋๋ค. (์ฅ์ ๋ณต๊ตฌ)
๐ก ์ ๋ด์ฉ์ ์ ๋ฆฌํ์๋ฉด, ํน์ Topic์ผ๋ก ๋ค์ด์จ ๋ฉ์์ง๋ค์ Topic ๋ด๋ถ์ ํํฐ์ ์ ๋๋ ์ ์ ์ฅ๋๊ฒ ๋๊ณ ํํฐ์ ๋ด๋ถ์๋ Offset์ด๋ผ๋ ์ ๋ณด๋ฅผ ํตํด ์์๋ฅผ ๋ณด์ฅํ์ง๋ง, ํํฐ์ ๊ฐ์๋ ๋ณด์ฅํ์ง ์์ต๋๋ค.
์ธ๊ทธ๋จผํธ ํ์ผ
ํํฐ์ ์ ์ถ๊ฐ๋๋ ๋ฉ์์ง๋ค์ ๋ก๊ทธ ํ์ผ์ด๋ผ๊ณ ํ๋๋ฐ ์ด ํ์ผ๋ค์ ์ค์ ํ์ผ ์์คํ ์ ์ ์ฅ์ด ๋ฉ๋๋ค. ์ด๋ ๋ง๋ค์ด์ง๋ ํ์ผ์ด ๋ฐ๋ก ์ธ๊ทธ๋จผํธ ํ์ผ์ด๊ณ ๋ธ๋ก์ปค ์ค์ ์ ํตํด ์ธ๊ทธ๋จผํธ ํ์ผ์ด ์ผ์ ์ฉ๋์ด ์ด๊ณผ๋๊ฑฐ๋ ์๊ฐ์ด ์ง๋๊ฒ ๋๋ฉด ์ญ์ ๋๋ ์์ถ์ ํ ์ ์์ต๋๋ค. ์ด๋ ํ์ผ์ ์ธ๊ทธ๋จผํธ ๋จ์๋ก ์ญ์ ๋ฉ๋๋ค.
Consumer Group: ๋ฉ์์ง๋ฅผ ์๋นํ๋ ๋ฐฉ๋ฒ
Consumer๋ ๊ทธ๋ฃน์ด๋ผ๋ ๊ฐ๋ ์ด ์๋๋ฐ ํน์ ํ ํฝ์ ์๋นํ๋ ์ปจ์๋จธ๋ค์๊ฒ Group-Id๋ฅผ ๋ถ์ฌํ๊ณ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ๊ฒ์ ๋๋ค.
์ด๋ฅผ ํตํด ํํฐ์ ์ Consumer Group๋ด์ ํ๋์ ์ปจ์๋จธ์ ์ํด์๋ง ๋ฉ์์ง๊ฐ ์๋น๋๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค.
case 1) Partition 3๊ฐ - Consumer 2๊ฐ
- ํํฐ์ ์ด 3๊ฐ, ์ปจ์๋จธ๊ฐ 2๊ฐ์ผ ๊ฒฝ์ฐ → ์ปจ์๋จธ ์ค ํ๋๋ ๋๊ฐ์ ํํฐ์ ์ ์๋น
- ์ด๋ฐ ๊ฒฝ์ฐ ์ฒ๋ฆฌ๋์ด ๋ง์์ง์๋ก ์ปจ์๋จธ์ ๋ณ๋ชฉํ์์ด ๋ฐ์ํ ์ ์์
case 2) Partition 3๊ฐ - Consumer 3๊ฐ
- ํํฐ์ ์ ๊ฐ์์ ์ปจ์๋จธ์ ๊ฐ์๊ฐ ๋์ผํ๋ค๋ฉด → ํํฐ์ ๊ณผ ์ปจ์๋จธ๊ฐ 1:1 ๋งค์นญ๋์ด ๋ฉ์์ง ์๋น
- ๊ฐ์ฅ ์ด์์ ์ธ ๊ตฌ์ฑ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ํํฐ์ ๋น ํ๋์ ์ปจ์๋จธ๊ฐ ๋ถ์ด์ ๋น ๋ฅด๊ฒ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
case 3) Partition 3๊ฐ - Consumer 4๊ฐ
ํด๋น ํ ํฝ์ ํํฐ์ ์ด 3๊ฐ์ด๊ณ ๊ทธ๋ฃน๋ด์ ์ปจ์๋จธ๋ 3๊ฐ์ธ ๊ฒฝ์ฐ์ ์ฌ๊ธฐ์ ํ๋๋ฅผ ๋ ์ถ๊ฐํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด 4๊ฐ์ ์ปจ์๋จธ๋๊น ์ฒ๋ฆฌ ์๋๊ฐ ํจ์ฌ ๋นจ๋ผ์ง ์ ์์๊น์?
์ ๊ทธ๋ฆผ์ ๋ชจ๋ ํํฐ์ ์ด ๊ทธ๋ฃน๋ด์ ์ปจ์๋จธ์ ๋งค์นญ์ด ๋ ์ํฉ์ ์ปจ์๋จธ๋ฅผ ํ๋ ์ถ๊ฐํ ์ํฉ์ ๋๋ค. ํํฐ์ ๊ณผ ๊ทธ๋ฃน ๋ด ์ปจ์๋จธ๋ 1:1 ๋งค์นญ์ด ๊ธฐ๋ณธ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ๋ ์ปจ์๋จธ๋ ์์ ์๊ฒ ํํฐ์ ์ด ๋ฐฐ์ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ด๋ ์์ ๋ญ๋น๊ฐ ๋ ์๋ ์์ง๋ง ๋ฉ์์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ๋์น๋ฉด ์๋๋ ์๋น์ค ๊ด์ ์์ ๋ฐ๋ผ๋ณธ๋ค๋ฉด ๋ค๋ฅธ ์ปจ์๋จธ์ ์ฅ์ ๋ฅผ ์ฆ์ ๋๋นํ ์ ์๋ ์ข์ ์ ๋ต์ด ๋ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ํํฐ์ ๊ฐ์์ ๋์ผํ๊ฒ ์ปจ์๋จธ๋ฅผ ๊ตฌ์ฑํ๋๊ฒ ๊ถ์ฅ๋ฉ๋๋ค.
Broker์ Zoopkeeper๋?
๋ธ๋ก์ปค๋ ํ๋ก๋์์ ์ปจ์๋จธ ๊ฐ ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ์ค๊ฐ ๊ด๋ฆฌ์ ์ญํ ์ ํฉ๋๋ค. ์นดํ์นด ํด๋ฌ์คํฐ์๋ ์ฌ๋ฌ ๊ฐ์ ๋ธ๋ก์ปค๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ์. ์ต์ 3๋ ์ด์์ ๋ธ๋ก์ปค๋ค๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ฃผํคํผ๋ ์นดํ์นด ๋ธ๋ก์ปค๋ค์ ๋ฉํ๋ฐ์ดํฐ๋ค์ ๊ด๋ฆฌํด์ค๋๋ค.
Broker๋ ๋ฌด์จ์ผ์ ํ ๊น?
- Leader Broker
- ํ๋์ ํ ํฝ ํํฐ์ ๋ง๋ค ์กด์ฌํ๋ ๋ฆฌ๋ ๋ธ๋ก์ปค๊ฐ ์กด์ฌํฉ๋๋ค. ๋ฆฌ๋ ๋ธ๋ก์ปค๋ 0๊ฐ ์ด์์ ํ๋ก์ ๋ธ๋ก์ปค๋ฅผ ๊ฐ์ง๋๋ค.
- Follwer Boker
- ๋ฆฌ๋์ ๋ฐฑ์ ์ ์ํด ์กด์ฌํ๋ ํ๋ก์ ๋ธ๋ก์ปค๋ ๋ฆฌ๋ ๋ธ๋ก์ปค๋ฅผ ๋ณต์ ํฉ๋๋ค.
- ๋ฆฌ๋ ๋ธ๋ก์ปค๊ฐ ๋ค์ด๋๋ฉด Zookeeper์ ์ํด์ ํ๋ก์ ๋ธ๋ก์ปค ์ค ํ๋๊ฐ ์๋ก์ด ๋ฆฌ๋๊ฐ ๋ฉ๋๋ค.
- Controller
- ํด๋ฌ์คํฐ์ ๋ค์ ๋ธ๋ก์ปค ์ค ํ๋๋ ์ปจํธ๋กค๋ฌ์ ์ญํ ์ ํฉ๋๋ค.
- ๋ฆฌ๋ ์ ์ , ํ ํฝ ์์ฑ, ํํฐ์ ์์ฑ, ๋ณต์ ๋ณธ ๊ด๋ฆฌ
- ๋ค๋ฅธ ๋ธ๋ก์ปค๋ค์ ์ํ๋ฅผ ์ฒดํฌํ๋ฉด์ ๋ธ๋ก์ปค๊ฐ ํด๋ฌ์คํฐ์์ ๋น ์ง๋ ๊ฒฝ์ฐ ํด๋น ๋ธ๋ก์ปค์ ์กด์ฌํ๋ ํํฐ์ ๋ค์ ๋ฆฌ๋ฐธ๋ฐ์ฑ ํ๋ ์ญํ ์ ํฉ๋๋ค.
- ํด๋ฌ์คํฐ์ ๋ค์ ๋ธ๋ก์ปค ์ค ํ๋๋ ์ปจํธ๋กค๋ฌ์ ์ญํ ์ ํฉ๋๋ค.
- Cordinator
- ํ๋์ ์ปจ์๋จธ ๊ทธ๋ฃน์์ ํด๋น ํ ํฝ์ ํํฐ์ ์ ๋ํด์ 1๋1๋ก consumeํ๊ณ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ปจ์๋จธ ํ๋๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋, ๋ค๋ฅธ ์ปจ์๋จธ์๊ฒ ํด๋น ํํฐ์ ์ Rebalance ํฉ๋๋ค.
- ํํฐ์
์คํ์
๊ด๋ฆฌ
- ํน์ ํํฐ์ ์ผ๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ฉด ํด๋น ํํฐ์ ์ ์คํ์ ์ ์ปค๋ฐํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
Zookeeper๋ ๋ฌด์จ์ผ์ ํ ๊น?
์ฃผํคํผ๋ ์๋์ ๊ฐ์ด ์นดํ์นด ๋ธ๋ก์ปค๋ค์ ๊ด๋ฆฌํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
- Controller ์ ์
- Controller ์ฅ์ ๋ฐ์ ์ ์๋ก์ด Controller๋ฅผ ์ ์ถ
- Broker, Consumer ๊ด๋ฆฌ
- Broker ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ, ์ํ ์ ๋ณด ๊ธฐ๋ก
- ์๋ก์ด Broker ์ถ๊ฐ
- Broker ์ฅ์ ๊ฐ์ง
- Leader Broker ์ฅ์ ์ ์๋ก์ด Leader ์ ์ถ
- Topic ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ
- Partition ๊ฐ์, ์ค์ ๊ด๋ฆฌ
- ๋ณ๊ฒฝ์ฌํญ(ํ ํฝ์ ์์ฑ ๋๋ ์ ๊ฑฐ, ๋ธ๋ก์ปค ์ถ๊ฐ ๋๋ ์ ๊ฑฐ)๋ค์ ์นดํ์นด ๋ธ๋ก์ปค๋ค์๊ฒ ์๋ฆฌ๋ ์ญํ
- ์ฃผํคํผ๋ ์ต์ 3๋ ์ด์(์ํฐํ๋ผ์ด์ฆ๋ 5๋ ์ด์)์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
- ์ฃผํคํผ ์์๋ธ: ์ฃผํคํผ 3๋ ์ด์์ผ๋ก ๊ตฌ์ฑํ ๊ฒ์ ์๋ฏธ
REFERENCES
- Kafka ์ดํดํ๊ธฐ
- [Apache Kafka] ์นดํ์นด๋ ๋ฌด์์ธ๊ฐ?
- Kafka์ ๋ํด์ ์์๋ณด์
- Apache Kafka ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๊ธฐ
- [Kafka] ๋๊ณ ์๊ฒ ์นดํ์นด๋ฅผ ์ดํดํด๋ณด์
- Kafka์ ๋ํด์ ์์๋ณด์
- Apache Kafka(์ํ์น ์นดํ์นด)๋? ์๊ฐ, ์์ฑ, ์ค์น ๋ฐ ์ฑ๋ฅ
- [Kafka] Apache Kafka ์ดํดํ๊ธฐ - SW Developer
- Apache Kafka๋ ๋ฌด์์ผ๊น? [Kafka์ ๊ตฌ์กฐ์ ๊ธฐ์ด๊ฐ๋ ]
- [Kafka] Kafka ์ Topic ๊ณผ Partition
- Apache Kafka Topics, Partitions, and Offsets - Scaler Topics