ํด๋น ์๋ฆฌ์ฆ์์ ์ ๊ณตํ๋ ๋ชจ๋ ์์ค์ฝ๋๋ github repository ์์ ์ ๊ณต๋ฉ๋๋ค. ์์ธํ ์ฝ๋์ ํ ์คํธ ์ผ์ด์ค๋ github repository ์์ ํ์ธํด์ฃผ์ธ์.
GitHub - my-research/kafka: apache kafka docs & practical usages(with spring) that i composed
apache kafka docs & practical usages(with spring) that i composed - GitHub - my-research/kafka: apache kafka docs & practical usages(with spring) that i composed
github.com

์ด๋ฒ [ํ์ต ํ ์คํธ๋ก ๋ฐฐ์๋ณด๋ kafka] ์๋ฆฌ์ฆ๋ ์๋ ์์๋๋ก ์ฑํฐ๊ฐ ๊ตฌ์ฑ๋๊ณ , ์๋ฆฌ์ฆ ์ธ๋ก kafka ๊ด๋ จํ์ฌ ๋์ฑ ๋ง์ ํ์ต ์ ๋ณด๋ kafka ์ฌํ ์ธ์ ์์ ํ์ธํ ์ ์์ต๋๋ค.
์๋ฆฌ์ฆ ๋ชฉ์ฐจ
- ์๋ฆฌ์ฆ๋ฅผ ์์ํ๋ฉฐ
- kafka ๋น ๋ฅด๊ฒ ํ์ด๋ณด๊ณ ์๋์ฒดํ๊ธฐ
- kafka ์ปจ์ ๊ณผ ์ฉ์ด ์ ๋ฆฌ <-- ํ์ฌ ๊ธ
- ํ์ตํ ์คํธ ์ค๋นํ๊ธฐ
- ํ์ต ํ ์คํธ๋ก kafka producer ์์๋ณด๊ธฐ
- ํ์ต ํ ์คํธ๋ก kafka consumer ์์๋ณด๊ธฐ
- ํ์ต ํ ์คํธ๋ก partitioning ์์๋ณด๊ธฐ
- ํ์ต ํ ์คํธ๋ก consumer group ๊ณผ rebalancing ์์๋ณด๊ธฐ
ํ์ต์ ๋จ๊ณ๋ณ ์์๋ก ๋ชฉ์ฐจ๊ฐ ๊ตฌ์ฑ๋์ด์์ผ๋ฏ๋ก ์ ํ๋์ด์ผ ํ๋ ์ฑํฐ๊ฐ ์กด์ฌํฉ๋๋ค
์ด๋ฒ ์ฑํฐ์์๋ kafka ์์ ์ฌ์ฉ๋๋ ์ฉ์ด์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค
์ค๋์ ๋ชฉํ๋ ์์ ๋ชฉํ์ ๋์ผํ๊ฒ ์ด ๊ธ๋ง ๋ณด๊ณ ๋ ์ด๋๊ฐ์ ์นดํ์นด์ ๋ํด์ ์๋์ฒด ํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
์ต๋ํ ํต์ฌ๋ง ์ ํํ ๊ตฌ์ฑํ๋ ค ๋ ธ๋ ฅํ์์ผ๋ ์งง๊ณ ๋น ๋ฅด๊ฒ ์ง์คํด์ ์ฝ๊ณ ์ด๋๊ฐ์ ์๋์ฒํ์
์นดํ์นด์ 6๊ฐ์ง์ ํต์ฌ ์์
์นดํ์นด๋ ๋ฌธ์(Introduction of kafka's terminology์์๋ ์ ์ ์๋ฏ์ด ํฌ๊ฒ 6๊ฐ์ง์ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ค.
- ์นดํ์นด์ ํต์ฌ ์๋ฒ, broker
- ์นดํ์นด์ ๋ฐ์ดํฐ ์ ์ฅ ํ ์ด๋ธ, topic
- ์นดํ์นด์ ์ ์คํธ๋ฆผ ํด๋ผ์ด์ธํธ, producer
- ์นดํ์นด์ ๋ค์ด์คํธ๋ฆผ ํด๋ผ์ด์ธํธ, consumer
- ์นดํ์นด์ ์ค์ง์ ์ธ ๋ฉ์์ง ํ, partition
- ์นดํ์นด์ ํต์ฌ ์์ ์์, replication
์นดํ์นด๋ ์์ 6๊ฐ์ง ๊ตฌ์ฑ์์๋ฅผ ํตํด ๋ฉ์์ง ์ธํ๋ผ๋ฅผ TCP ๋คํธ์ํฌ ์์์ ์ ๊ณตํ๋ค.

์ ๊ทธ๋ฆผ์ ์์ 6๊ฐ์ง ๊ตฌ์ฑ์์๋ฅผ ํํํ ๊ทธ๋ฆผ์ด๋ค.
์์ธํ ์ค๋ช ํ๊ธฐ ์ ์ ๋จผ์ ์์ฝํด์ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค. ์ ๋ง ๋ฐ์๋ค๋ฉด!! ์ด ์์ฝ๋ง ๋ณด๊ณ ๋์ด๊ฐ๋ ์ข๋ค.
์ด์ฐจํผ ์ถํ์ ์ฐ๋ฆฌ๊ฐ ํ์ตํ ์คํธ๋ฅผ ์งํํ๋ฉฐ ๊ฐ๊ฐ์ ํญ๋ชฉ๋ค์ ๋ํด์ ๋ ์์ธํ ๋ค๋ฃจ๋๋ก ํ๊ณ ์ง๊ธ ์๊ฐ์ ์์ด์ฏค์ผ๋ก ์๊ฐํ์
- broker
- ์นดํ์นด ๋ธ๋ก์ปค, ํต์ฌ ๊ตฌ์ฑ์์
- ์นดํ์นด๋ก ๋ค์ด์ค๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ์ ์คํ ๋ฆฌ์ง ์๋ฒ
- ํ ํฝ, ํํฐ์ , ๋ณต์ ๋ฑ์ ๊ด๋ฆฌ
- topic
- ์ด๋ฒคํธ์ ์นดํ ๊ณ ๋ฆฌ
- ์ด๋ฒคํธ๊ฐ ์ ์ฅ๋๋ ๋จ์
- ํ๋ก๋์์ ์ปจ์๋จธ๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ธฐ๋ณธ์ ์ธ ๋จ์
- producer
- ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์์ฐ
- ํน์ ํํฐ์ ์๋ ์์ฐ ๊ฐ๋ฅ
- consumer
- ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์๋น
- ํน์ ํํฐ์ ์๋ ์๋น ๊ฐ๋ฅ
- partition
- ์นดํ์นด ํ ํฝ์ ์กด์ฌํ๋ ์ค์ ๋ฉ์์ง ์ ์ฅ์
1. ์นดํ์นด์ ํต์ฌ ์๋ฒ, broker
Kafka ์ broker ๋ ์์ Message Oriented Middleware๊ณผ Message Broker์ ์ฐจ์ด ๋ฐ ์๋ฆฌ ๋ผ๋ ๊ธ์์ ์ธ๊ธํ๋ message broker ์ ๋์ผํ ๊ฐ๋ ์ผ๋ก message provider ๋ค.
์นดํ์นด ๋ธ๋ก์ปค๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ปดํฌ๋ํธ๋ ํน์ ํ upstream producer ๋ก ๋ถํฐ ๋ฐ์ํ๋ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์ ์ฅํ๋ ์๋ฒ์ด๋ค.
์นดํ์นด ๋ธ๋ก์ปค๋ ์ด๋ฒคํธ๋ฅผ ์ ์ฅํ๋ ์คํ ๋ฆฌ์ง ๋ ์ด์ด ์๋ฒ์ธ๋ฐ, ํด๋น ์๋ฆฌ์ฆ์ ์์ ํํธ 1. ์นดํ์นด ํต์ฌ ๋น ๋ฅด๊ฒ ํ์ด๋ณด๊ณ ์๋์ฒดํ๊ธฐ ์ด์ผ๊ธฐํ๋ log based architecture ๋ฅผ ์ํ ์ค์ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ์์ง์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์นดํ์นด ๋ธ๋ก์ปค๋ ์ฌ์ค์ ์นดํ์นด ์ธํ๋ผ์ ํต์ฌ์ด๊ณ ์ฌ์ฅ์ด๋ผ๊ณ ํ ์ ์๋ค.
์๋์์ ์ด์ผ๊ธฐํ ํํฐ์ ๊ณผ ๋ฆฌํ๋ฆฌ์ผ์ด์ ๋ค์ ๊ด๋ฆฌํ๊ธฐ๋ ํ๋ฉฐ producer ์ consumer ๋ก๋ถํฐ ๋ค์ด์ค๋ read/write request ๋ฅผ ์ฒ๋ฆฌํ๋ค
๋ง์ ์ผ์ ํ๋๊ฒ ์ฒ๋ผ ๋ณด์ด์ง๋ง confluent ๊ฐ ์ ๊ณตํ๋ kafka 101 ์ด๋ผ๋ ํ์ต์ฉ ์์์์๋
kafka broker dont do a lot, They are intentionally kept very simple
๋ผ๊ณ ํ๋ค.
๋ฒ์ธ๋ก, ์นดํ์นด ํด๋ฌ์คํฐ๋ผ๋ ์ฉ์ด๋ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ์ด๋ค
์ด ์นดํ์นด ํด๋ฌ์คํฐ๊ฐ ๋ฐ๋ก ์ฌ๋ฌ๊ฐ์ ์นดํ์นด ๋ธ๋ก์ปค๋ค์ ๋ฌถ์ด๋์ ๊ฐ๋ ์ด๋ค.
์ฆ, ์ฐ๋ฆฌ๋ ํด๋ฌ์คํฐ์ ํ ๋ธ๋ก์ปค์ connection ์ ๋งบ์ด ์ํธ์์ฉ์ ํ๊ฒ ๋๋ค.
์ฌ๋ฏธ์๋ ํน์ง์ผ๋ก๋ ์นดํ์นด ๋ธ๋ก์ปค๋ bootstrap server ๋ก์ ์ญํ ์ ์ํํ๋ค.
bootstrap ์ ์ผ๋ฐ์ ์ผ๋ก initialize ๋จ๊ณ์์ ์ฌ์ฉ๋๋ ์ด๊ธฐํ ๋ฐ์ดํฐ ํน์ ์คํ์ ์ํ ์ด๊ธฐ ์ค์ ๋จ๊ณ์ ์์ ์ ์ด์ผ๊ธฐํ๋ค.
๊ทธ๋์ ํน์ ๋ธ๋ก์ปค๊ฐ bootstrap server ๋ฅผ ์ํํ์ฌ ๋ค๋ฅธ ๋ธ๋ก์ปค๋ค๊ณผ ์ฐ๊ฒฐํ ์ ์๊ณ , ์ฐ๊ฒฐ๋ ๋ธ๋ก์ปค๋ค ์์ฒด๊ฐ bootstraping ์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.

๊ทธ๋์ ํด๋ฌ์คํฐ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ธ๋ก์ปค ํ๋ ํ๋๊ฐ ๋ค๋ฅธ ํด๋ฌ์คํฐ์ ๋ํ ๋ธ๋ก์ปค๊ฐ ๋ ์ ์๋ค. (์ด ํน์ฑ์ด ๊ณ ๊ฐ์ฉ์ฑ์ ์ง์ํ๋ ํน์ฑ์ด ๋๋ค)
๊ฒฐ๊ตญ ํด๋ผ์ด์ธํธ๋ ํน์ ๋ธ๋ก์ปค์ ์ ์ํ์ฌ ํด๋ฌ์คํฐ ๋ด์ ๋ฉํ๋ฐ์ดํฐ (๋ธ๋ก์ปค ๋ชฉ๋ก, ํ ํฝ ์ ๋ณด ๋ฑ)์ ๊ฐ์ ธ์ค๊ณ ์ด ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ๋ธ๋ก์ปค๋ค๊ณผ ์ฐ๊ฒฐํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
2. ์นดํ์นด์ ๋ฐ์ดํฐ ์ ์ฅ ํ ์ด๋ธ, topic
topic ์ ์นดํ ๊ณ ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
kafka ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์ด๋ฒคํธ๋ค์ ๋ํด์ ํ ํฝ์ด๋ผ๋ ๋จ์๋ก categorizing ํ์ฌ ๋ฐ์ดํฐ๋ฅผ storing ํ๋ค.
์ด๋ฒคํธ๊ฐ ์ ์ฅ๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ ๊ตฌ์ฑ ๋จ์๋ผ๊ณ ํ ์ ์๊ณ , ํ ํฝ์ ํ์ผ์์คํ ์ผ๋ก ์ค๋ช ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค.
ํ ํฝ์ด ๋๋ ํ ๋ฆฌ๋ผ๊ณ ํ๋ค๋ฉด ์ด๋ฒคํธ๋ค์ ํด๋น ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ ์กด์ฌํ๋ ํ์ผ๋ค์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค
.
โโโ order.ordered <- topic
โ โโโ event-1
โ โโโ event-2
โ โโโ event-3
โ โโโ event-4
โโโ member.terminated <- topic
โ โโโ event-1
โ โโโ event-2
โ โโโ event-3
ํ ํฝ์ append only ์ด๋ฉฐ, ์ ์ด๋ฒคํธ ๋ฉ์์ง๊ฐ ํ ํฝ์ ๋ค์ด์ ์ ์ฅ์ด ๋๋ค๋ฉด ์ ๋ ์์ ๋ ์ ์๋ค.
๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ํ ํ์์ ๋ฉ์์ง ์ธํ๋ผ์ ๋ฌ๋ฆฌ ํ ํฝ์๋ producer ์ consumer ๊ฐ ์ฌ๋ฌ๊ฐ ์ผ ์ ์๋ ๊ฒ์ ๊ธฐ์ตํ์
์ญ์ kafka 101 ์์์์๋ ํ ํฝ์ queue ๊ฐ ์๋๋ผ
log of events
๋ผ๊ณ ํํํ๋ค. log ๋ผ๋ ์ปจ์ ์ด ์๊ธฐ์immutable
,append only
๊ทธ๋ฆฌ๊ณseek by offset
์ด ์์ฐ์ค๋ฌ์ด ๊ฒ์ด๋ค.
3. ์นดํ์นด์ ์ ์คํธ๋ฆผ ํด๋ผ์ด์ธํธ, producer
producer ๋ ์ด๋ฒคํธ๋ฅผ ์์ฐํ๋ ํด๋ผ์ด์ธํธ๋ค.
๋ณดํต upstream ํน์ ์์ฐ์ ํน์ publisher ๋ผ๊ณ ํํํ๊ธฐ๋ ํ๋๋ฐ, producer ๊ฐ topic ์ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ์ญํ ์ ์ํํ๋ค

ํ๋ก๋์๋ ์ํ๋ค๋ฉด ํน์ topic ๋ด์ partition ์๋ ๋ฉ์์ง๋ฅผ ๋ฐํํ ์ ์๋ค
์์ธํ ๊ฒ์ ํ์ ์์ ํ๋ก๋์ ํํธ์์ ๋ ์ด์ผ๊ธฐํ๋๋ก ํ์
4. ์นดํ์นด์ ๋ค์ด์คํธ๋ฆผ ํด๋ผ์ด์ธํธ, consumer
consumer ๋ ์นดํ์นด์์ ์ด๋ฒคํธ๋ฅผ ์๋นํ๋ ํด๋ผ์ด์ธํธ๋ค.
์ญ์ consumer ๋ฅผ downstream, ์๋น์ ํน์ subscriber ๋ผ๊ณ ํํํ๋ค.
consumer ๋ ํน์ ํ ํฝ์์ ์ด๋ฒคํธ๋ฅผ ์ฝ๊ณ ์ด๋๊น์ง ์ฝ์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์คํ์ ์ด๋ผ๋ ๋ฐ์ดํฐ๋ก ๊ตฌ๋ถํ๋ค.
์ผ๋ฐ์ ์ธ ์ํฉ์์๋ ์คํ์ ์ด ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ์ง๋ง, ์คํ์ ์ ์ปจ์๋จธ๊ฐ ๊ฒฐ์ ํ์ฌ ์ธ์ ๋ ํน์ ์์น๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์๋นํ ์ ์๋ค.
์์ธํ ๊ฒ์ ์ญ์ ํ์ ์์ ์ปจ์๋จธ ํํธ์์ ๋ ์ด์ผ๊ธฐํ๋๋ก ํ์
5. ์นดํ์นด์ ์ค์ง์ ์ธ ์ ์ฅ์, partition
์ด๋ ํ ์ด๋ฒคํธ๊ฐ ์์ฐ์์ ์ํด์ publish ๋๋ค๋ฉด, ์ค์ ๋ก๋ ํ ํฝ์ ์ ์ฅ๋๋๊ฒ์ด ์๋๋ผ ํ ํฝ์ ์กด์ฌํ๋ ํน์ ํํฐ์ ์ ์ ์ฅ๋๋ ๊ฒ์ด๋ค.
์นดํ์นด๋ ํ๋์ ํ ํฝ ๋ด์์ ์ฌ๋ฌ๊ฐ์ ํํฐ์ ์ ๋ง๋ค ์ ์๋๋ก ํ์ฌ ์ฒ๋ฆฌ๋์ ๋๋ฆฐ๋ค.
6. ์นดํ์นด์ ํต์ฌ ์์ ์์, replication
์์ ์ ์นดํ์นด๋ high availability ์ scalability ๋ฅผ ์ง์ํ๋ค๊ณ ํ๋๋ฐ, ๊ทธ ํต์ฌ ์์๊ฐ ๋ฐ๋ก ์ด replication ์ด๋ค.
์นดํ์นด์์ replication ์ ํ์ฑํํ๋ค๋ฉด ๋ชจ๋ ํ ํฝ์ ๋ณต์ ํ์ฌ ์ฅ์ ์ ๋ํ ๋ด๊ฒฐํจ์ ๊ฐ๋๋ก ํ๋ค.
์ค์ ๋ก ๋ฐ์ดํฐ๊ฐ ์นดํ์นด ๋ธ๋ก์ปค๋ก ๋ค์ด์์ ๋ ์ด๋ ํ ํ ํฝ์ ๋ฐ์ดํฐ๊ฐ ์์ธ๋ค๋ฉด replication ์ ์ํด์ ๋ณต์ ๋ณธ ํ ํฝ์ ๊ฐ์ด ์์ด๊ฒ ๋๋ค.
๋๊ธ