๐ Kafka ํด๋ผ์ด์ธํธ
์ฑ '์ํ์น ์นดํ์นด ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ with ์๋ฐ - ์ต์์ ์ง์'์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ์์ต๋๋ค.
1. ์นดํ์นด ํด๋ผ์ด์ธํธ
์นดํ์นด ํด๋ฌ์คํฐ ๋ช
๋ น์ ๋ด๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ธฐ ์ํด ์นดํ์นด ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์นดํ์นด ํ๋ก๋์, ์ปจ์๋จธ, ์ด๋๋ฏผ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํ๋ ์นดํ์นด ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ณตํ๋ค.
์นดํ์นด ํด๋ผ์ด์ธํธ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์์ฒด ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์์์ ๊ตฌํํ๊ณ ์คํ ํด์ผํ๋ค.
(1) ํ๋ก๋์ API
ํ๋ก๋์๋ ๋ฐ์ดํฐ ์์์ ์ผ๋ก, ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ์นดํ์นด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ๋ธ๋ก์ปค์ ํน์ ํ ํฝ์ ํํฐ์
์ ์ ์กํ๋ค.
ํ๋ก๋์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ๋ฆฌ๋ ํํฐ์
์ ๊ฐ์ง๊ณ ์๋ ์นดํ์นด ๋ธ๋ก์ปค์ ์ง์ ํต์ ํ๋ค.
ํ๋ก๋์๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ ์นดํ์นด ํด๋ผ์ด์ธํธ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถ๊ฐํ์ฌ ์๋ฐ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๊ฒ์ด๋ค.
(1)-1 ํ๋ก๋์ ๋ด๋ถ ๋ก์ง
ํ๋ก๋์๋ ์นดํ์นด ๋ธ๋ก์ปค๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ๋ด๋ถ์ ์ผ๋ก ํํฐ์ ๋, ๋ฐฐ์น ์์ฑ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
[ Java ๊ธฐ์ค ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐจ ]
- ์ ์กํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ProducerRecord ํด๋์ค๋ฅผ ํตํด ์ธ์คํด์ค ์์ฑํ๊ณ , send() ๋ฉ์๋ ํธ์ถ
- ProducerRecord๋ ํํฐ์
๋(partitioner)์์ ํ ํฝ์ ์ด๋ ํํฐ์
์ผ๋ก ์ ์ก๋ ๊ฒ์ธ์ง ์ ํด์ง๋ค.
- KafkaProducer ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํํฐ์ ๋๋ฅผ ๋ฐ๋ก ์ค์ ํ์ง ์์ผ๋ฉด DefaultPartioner๋ก ์ค์ ๋๋ค.
- ํํฐ์
๋์ ์ํด ๊ตฌ๋ถ๋ ๋ ์ฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์ ์ดํ๋ฎฌ๋ ์ดํฐ(Accumulator)์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ก ์์๋๊ณ ๋ฐ์กํ๋ค.
- ๋ฒํผ๋ก ์์ธ ๋ฐ์ดํฐ๋ ๋ฐฐ์น๋ก ๋ฌถ์ด์ ์ ์ก๋๋ค. ์ด๋ ์นดํ์นด ํ๋ก๋์ ์ฒ๋ฆฌ๋์ ํฅ์์ํค๋๋ฐ ๋์์ ์ค๋ค.
- ์ผ๋(sender) ์ค๋ ๋๋ Accumulator์ ์์ธ ๋ฐฐ์น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ ํํฌํ ๋ธ๋ก์ปค๋ก ์ ์กํ๋ค.
ํ๋ก๋์ API ํํฐ์ ์ข ๋ฅํ๋ก๋์ API๋ 2๊ฐ์ ํํฐ์ ์ ์ ๊ณตํ๋ค.
๋ ๋ค ๋ฉ์์ง ํค๊ฐ ์์ ๋๋ ๋ฉ์์ง ํค์ ํด์๊ฐ๊ณผ ํํฐ์ ์ ๋งค์นญํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ๋ค๋ง ๋ฉ์์ง ํค๊ฐ ์์ ๋๋ ํํฐ์ ์ ์ต๋ํ ๋์ผํ๊ฒ ๋ถ๋ฐฐํ๋ ๋ก์ง ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
- UniformStickyPartitioner :
- ๋ฒ์ 2.4.0 ์ด์์์ ๊ธฐ๋ณธ ์ค์ ๋๋ ์ต์ ์ผ๋ก, ํ๋ก๋์ ๋์์ ํนํ๋์ด ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ฎ์ ๋ฆฌ์์ค ์ฌ์ฉ๋ฅ ์ ๊ฐ์ง๋ค.
- Accumulator์์ ๋ฐ์ดํฐ๊ฐ ๋ฐฐ์น๋ก ๋ชจ๋ ๋ฌถ์ผ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ฐฐ์น๋ก ๋ฌถ์ธ ๋ฐ์ดํฐ๋ ๋ชจ๋ ๋์ผํ ํํฐ์ ์ ์ ์กํจ์ผ๋ก์จ, RoundRobinPartitioner์ ๋นํด ํฅ์๋ ์ฑ๋ฅ์ ๊ฐ์ง๋ค.
- RoundRobinPartitioner:
- ProducerRecord๊ฐ ๋ค์ด์ค๋ ๋๋ก ํํฐ์ ์ ์ํํ๋ฉด์ ์ ์กํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์น๋ก ๋ฌถ์ด๋ ๋น๋๊ฐ ์ ๋ค.
(2) ์ปจ์๋จธ API
์ปจ์๋จธ๋ ์ ์ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ธ๋ก์ปค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ์ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์ปจ์๋จธ๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ ํ๋ก๋์์ ๋์ผํ๊ฒ ์นดํ์นด ํด๋ผ์ด์ธํธ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถ๊ฐํ์ฌ ์๋ฐ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๊ฒ์ด๋ค.
(2)-1 ์ปจ์๋จธ ์ด์ ๋ฐฉ์
ํ ํฝ์ ํํฐ์ ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ์ปจ์๋จธ๋ฅผ ์ด์ํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 2๊ฐ์ง์ด๋ค.
- 1๊ฐ ์ด์์ ์ปจ์๋จธ๋ก ์ด๋ฃจ์ด์ง ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ด์
- ํ ํฝ์ ํน์ ํํฐ์ ๋ง ๊ตฌ๋ ํ๋ ์ปจ์๋จธ๋ฅผ ์ด์
์ปจ์๋จธ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ธ ์ปจ์๋จธ๋ค์ ํ ํฝ์ 1๊ฐ ์ด์์ ํํฐ์ ์ ํ ๋น๋์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์๋ค.
- 1๊ฐ์ ํํฐ์ ์ ์ต๋ 1๊ฐ์ ์ปจ์๋จธ์ ํ ๋น ๊ฐ๋ฅํ๊ณ , 1๊ฐ์ ์ปจ์๋จธ๋ ์ฌ๋ฌ ๊ฐ์ ํํฐ์ ์ ํ ๋น๋ ์ ์๋ค. (์ปจ์๋จธ ๊ทธ๋ฃน์ ์ปจ์๋จธ ๊ฐ์ <= ๊ฐ์ ธ๊ฐ๊ณ ์ ํ๋ ํ ํฝ์ ํํฐ์ ๊ฐ์)
- ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ค๋ฅธ ์ปจ์๋จธ ๊ทธ๋ฃน๊ณผ ๊ฒฉ๋ฆฌ๋๋ฏ๋ก ๊ทธ๋ฃน๋ผ๋ฆฌ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ด๋ฌํ ํน์ง์ ์ต์ข ์ ์ฌ๋๋ ์ ์ฅ์์ ์ฅ์ ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋๋ก ๊ฐ๊ธฐ ๋ค๋ฅธ ์ ์ฅ์์ ์ ์ฅํ๋ ์ปจ์๋จธ๋ฅผ ๋ค๋ฅธ ์ปจ์๋จธ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์์ผ๋ก์จ ๊ฐ ์ ์ฅ์์ ์ฅ์ ์ ๊ฒฉ๋ฆฌ๋์ด ์ด์ํ ์ ์๋ค.
(2)-2 ์ปจ์๋จธ ์ฅ์ ๋ฐ์ ๋์ (๋ฆฌ๋ฒจ๋ฐ์ฑ)
๋ฆฌ๋ฒจ๋ฐ์ฑ
์ปจ์๋จธ ๊ทธ๋ฃน์ ํน์ ์ปจ์๋จธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ์ฅ์ ๊ฐ ๋ฐ์ํ ์ปจ์๋จธ์๊ฒ ํ ๋น๋ ํํฐ์ ์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ง ์์ ์ปจ์๋จธ์๊ฒ ์์ ๊ถ์ด ๋์ด๊ฐ๋ค. โ ๋ฆฌ๋ฒจ๋ฐ์ฑ(rebalancing)
๋ฆฌ๋ฒจ๋ฐ์ฑ์ด ๋ฐ์ํ๋ ์ํฉ
- ์ปจ์๋จธ๊ฐ ์ถ๊ฐ๋๋ ์ํฉ
- ์ปจ์๋จธ๊ฐ ์ ์ธ๋๋ ์ํฉ
์ปจ์๋จธ ์ค 1๊ฐ์ ์ด์๊ฐ ๋ฐ์ํ์ฌ ๋์์ ์ ํ๊ณ ์๋ค๋ฉด ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋ฅผ ํด์ํ๊ธฐ ์ํด ์ด์๊ฐ ๋ฐ์ํ ์ปจ์๋จธ๋ฅผ ์ปจ์๋จธ ๊ทธ๋ฃน์์ ์ ์ธํ์ฌ ๋ชจ๋ ํํฐ์ ์ด ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ฐ์ฉ์ฑ์ ๋์ฌ์ค๋ค.
๋ฆฌ๋ฒจ๋ฐ์ฑ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋์ค ์ธ์ ๋ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ฃน ์กฐ์ ์
๊ทธ๋ฃน ์กฐ์ ์(group coordinator)๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ๋ฐ๋์ํค๋ ์ญํ ์ ํ๋๋ฐ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ปจ์๋จธ๊ฐ ์ถ๊ฐ๋๊ณ ์ญ์ ๋ ๋๋ฅผ ๊ฐ์งํ๋ค. ์ด๋ ์นดํ์นด ๋ธ๋ก์ปค ์ค ํ ๋๊ฐ ๊ทธ๋ฃน ์กฐ์ ์ ์ญํ ์ ํ๋ค.
(2)-3 ์ปจ์๋จธ ๋ด๋ถ ๊ตฌ์กฐ
์คํ์ ์ปค๋ฐ
์ปจ์๋จธ๋ ๋ธ๋ก์ปค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋๊น์ง ๊ฐ์ ธ๊ฐ๋์ง ์ปค๋ฐ(commit)์ ํตํด ๊ธฐ๋กํ๋ค.
ํน์ ํ ํฝ์ ํํฐ์
์ ์ด๋ค ์ปจ์๋จธ ๊ทธ๋ฃน์ด ๋ช ๋ฒ์งธ ๊ฐ์ ธ๊ฐ๋์ง ๋ธ๋ก์ปค ๋ด๋ถ์ ์ฌ์ฉ๋๋ ๋ด๋ถ ํ ํฝ(_consumer_offsets)์ ๊ธฐ๋ก๋๋ค.
๋ง์ฝ ์ปจ์๋จธ ๋์ ์ด์๋ก, ์คํ์
์ปค๋ฐ์ ๊ธฐ๋ก ๋ชปํ๋ค๋ฉด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ณต์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ปจ์๋จธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ์
์ปค๋ฐ์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฆํด์ผ๋ง ํ๋ค.
์คํ์ ์ปค๋ฐ์ ์ปจ์๋จธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ช ์์ , ๋น๋ช ์์ ์ผ๋ก ์ํํ ์ ์๋ค.
- ๋น๋ช
์ ์คํ์
์ปค๋ฐ : ์ผ์ ๊ฐ๊ฒฉ๋ง๋ค ์๋์ผ๋ก ์ปค๋ฐ (enable.auto.commit=true)
- poll() ๋ฉ์๋๊ฐ auto.commit.interval.ms์ ์ค์ ๋ ๊ฐ ์ด์์ด ์ง๋ฌ์ ๋ ๊ทธ ์์ ๊น์ง ์ฝ์ ๋ ์ฝ๋์ ์คํ์ ์ ์ปค๋ฐํจ
- poll() ๋ฉ์๋ ํธ์ถํ ๋ ์ปค๋ฐ์ ์ํํ๋ฏ๋ก ์ฝ๋์์ผ๋ก ์ปค๋ฐ ๊ด๋ จ ์ฝ๋ ๋ฐ๋ก ์์ฑํ ํ์ ์๋ค. ๋ค๋ง, poll() ๋ฉ์๋ ํธ์ถ ์ดํ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ ๋๋ ์ปจ์๋จธ ๊ฐ์ ์ข ๋ฃ ๋ฐ์ ์ ์ปจ์๋จธ๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต ๋๋ ์ ์ค๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ทจ์ฝํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
- ๋ช
์์ ์คํ์
์ปค๋ฐ : poll() ๋ฉ์๋ ํธ์ถ ์ดํ์ ๋ฐํ๋ฐ์ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๊ณ commitSync() ๋ฉ์๋๋ฅผ ํธ์ถ
- commitSync()๋ poll()๋ฅผ ํตํด ๋ฐํ๋ ๋ ์ฝ๋์ ๊ฐ์ฅ ๋ง์ง๋ง ์คํ์ ์ ๊ธฐ์ค์ผ๋ก ์ปค๋ฐ์ ์ํํจ
- commitSync()๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋ฐ ์์ฒญ์ ์ ์กํ๊ณ ์๋ต์ด ์ค๊ธฐ ์ ๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
์ปจ์๋จธ ๋ด๋ถ ๊ตฌ์กฐ
์ปจ์๋จธ๋ ์๋ฐ ๊ธฐ์ค poll() ๋ฉ์๋๋ฅผ ํตํด ๋ ์ฝ๋๋ค์ ๋ฐํ๋ฐ์ง๋ง, poll() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์์ ์ ํด๋ฌ์คํฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค์ง ์๋๋ค.
[ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๋ ๊ณผ์ ]
- ์ปจ์๋จธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด ๋ด๋ถ์์ Fetcher ์ธ์คํด์ค๊ฐ ์์ฑ๋จ
- poll() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ปจ์๋จธ๋ ๋ด๋ถ ํ์ ์๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํ์ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ
(3) ์ด๋๋ฏผ API
์ค์ ์ด์ํ๊ฒฝ์์ ์นดํ์นด ๋ด๋ถ ์ต์
์ ์ค์ ํ๊ณ ํ์ธํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ด๋ถ ์ต์
์ ํ์ธํ๋ ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ ๋ธ๋ก์ปค ํ ๋์ ์ ์๊ฐ์ฌ ์นดํ์นด ๋ธ๋ก์ปค ์ต์
์ ํ์ธํ๋ ๊ฒ์ด์ง๋ง ๋ฒ๊ฑฐ๋กญ๋ค. ์นดํ์นด ์ปค๋งจ๋ ๋ผ์ธ ์ธํฐํ์ด์ค๋ก ๋ช
๋ น์ ๋ด๋ ค ํ์ธํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง ์ผํ์ฑ ์์
์ด๋ค.
์นดํ์นด ํด๋ผ์ด์ธํธ์์๋ ๋ด๋ถ ์ต์ ๋ค์ ์ค์ ํ๊ฑฐ๋ ์กฐํํ๊ธฐ ์ํด AdminClient ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค. ํด๋น ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ ์ต์ ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ ์๋ํํ ์ ์๋ค.
[ AdminClient ๊ธฐ๋ฅ ]
- ๋ธ๋ก์ปค ์ ๋ณด ์กฐํ
- ํ ํฝ ๋ฆฌ์คํธ ์กฐํ
- ์ปจ์๋จธ ๊ทธ๋ฃน ์กฐํ
- ์ ๊ท ํ ํฝ ์์ฑ
- ํํฐ์ ๊ฐ์ ๋ณ๊ฒฝ
- ์ ๊ทผ ์ ์ด ๊ท์น ์์ฑ
'#๏ธโฃ Data Engineering > Kafka' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kafka] Kafka ๊ฐ๋ ๊ณผ ๊ตฌ์ฑ์์ ๋ฐ ์๋ฆฌ (0) | 2023.03.03 |
---|---|
[Kafka] ํ ํฝ๊ณผ ํํฐ์ , ๋ ์ฝ๋ (0) | 2023.02.13 |
[Kafka] Kafka ๊ฐ๋ ๊ณผ ์ปดํฌ๋ํธ (0) | 2023.02.13 |
๐ Kafka ํด๋ผ์ด์ธํธ
์ฑ '์ํ์น ์นดํ์นด ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ with ์๋ฐ - ์ต์์ ์ง์'์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ์์ต๋๋ค.
1. ์นดํ์นด ํด๋ผ์ด์ธํธ
์นดํ์นด ํด๋ฌ์คํฐ ๋ช
๋ น์ ๋ด๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ธฐ ์ํด ์นดํ์นด ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์นดํ์นด ํ๋ก๋์, ์ปจ์๋จธ, ์ด๋๋ฏผ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํ๋ ์นดํ์นด ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ณตํ๋ค.
์นดํ์นด ํด๋ผ์ด์ธํธ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์์ฒด ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์์์ ๊ตฌํํ๊ณ ์คํ ํด์ผํ๋ค.
(1) ํ๋ก๋์ API
ํ๋ก๋์๋ ๋ฐ์ดํฐ ์์์ ์ผ๋ก, ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ์นดํ์นด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ๋ธ๋ก์ปค์ ํน์ ํ ํฝ์ ํํฐ์
์ ์ ์กํ๋ค.
ํ๋ก๋์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ๋ฆฌ๋ ํํฐ์
์ ๊ฐ์ง๊ณ ์๋ ์นดํ์นด ๋ธ๋ก์ปค์ ์ง์ ํต์ ํ๋ค.
ํ๋ก๋์๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ ์นดํ์นด ํด๋ผ์ด์ธํธ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถ๊ฐํ์ฌ ์๋ฐ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๊ฒ์ด๋ค.
(1)-1 ํ๋ก๋์ ๋ด๋ถ ๋ก์ง
ํ๋ก๋์๋ ์นดํ์นด ๋ธ๋ก์ปค๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ๋ด๋ถ์ ์ผ๋ก ํํฐ์ ๋, ๋ฐฐ์น ์์ฑ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
[ Java ๊ธฐ์ค ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐจ ]
- ์ ์กํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ProducerRecord ํด๋์ค๋ฅผ ํตํด ์ธ์คํด์ค ์์ฑํ๊ณ , send() ๋ฉ์๋ ํธ์ถ
- ProducerRecord๋ ํํฐ์
๋(partitioner)์์ ํ ํฝ์ ์ด๋ ํํฐ์
์ผ๋ก ์ ์ก๋ ๊ฒ์ธ์ง ์ ํด์ง๋ค.
- KafkaProducer ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํํฐ์ ๋๋ฅผ ๋ฐ๋ก ์ค์ ํ์ง ์์ผ๋ฉด DefaultPartioner๋ก ์ค์ ๋๋ค.
- ํํฐ์
๋์ ์ํด ๊ตฌ๋ถ๋ ๋ ์ฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์ ์ดํ๋ฎฌ๋ ์ดํฐ(Accumulator)์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ก ์์๋๊ณ ๋ฐ์กํ๋ค.
- ๋ฒํผ๋ก ์์ธ ๋ฐ์ดํฐ๋ ๋ฐฐ์น๋ก ๋ฌถ์ด์ ์ ์ก๋๋ค. ์ด๋ ์นดํ์นด ํ๋ก๋์ ์ฒ๋ฆฌ๋์ ํฅ์์ํค๋๋ฐ ๋์์ ์ค๋ค.
- ์ผ๋(sender) ์ค๋ ๋๋ Accumulator์ ์์ธ ๋ฐฐ์น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ ํํฌํ ๋ธ๋ก์ปค๋ก ์ ์กํ๋ค.
ํ๋ก๋์ API ํํฐ์ ์ข ๋ฅํ๋ก๋์ API๋ 2๊ฐ์ ํํฐ์ ์ ์ ๊ณตํ๋ค.
๋ ๋ค ๋ฉ์์ง ํค๊ฐ ์์ ๋๋ ๋ฉ์์ง ํค์ ํด์๊ฐ๊ณผ ํํฐ์ ์ ๋งค์นญํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ๋ค๋ง ๋ฉ์์ง ํค๊ฐ ์์ ๋๋ ํํฐ์ ์ ์ต๋ํ ๋์ผํ๊ฒ ๋ถ๋ฐฐํ๋ ๋ก์ง ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
- UniformStickyPartitioner :
- ๋ฒ์ 2.4.0 ์ด์์์ ๊ธฐ๋ณธ ์ค์ ๋๋ ์ต์ ์ผ๋ก, ํ๋ก๋์ ๋์์ ํนํ๋์ด ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ฎ์ ๋ฆฌ์์ค ์ฌ์ฉ๋ฅ ์ ๊ฐ์ง๋ค.
- Accumulator์์ ๋ฐ์ดํฐ๊ฐ ๋ฐฐ์น๋ก ๋ชจ๋ ๋ฌถ์ผ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ฐฐ์น๋ก ๋ฌถ์ธ ๋ฐ์ดํฐ๋ ๋ชจ๋ ๋์ผํ ํํฐ์ ์ ์ ์กํจ์ผ๋ก์จ, RoundRobinPartitioner์ ๋นํด ํฅ์๋ ์ฑ๋ฅ์ ๊ฐ์ง๋ค.
- RoundRobinPartitioner:
- ProducerRecord๊ฐ ๋ค์ด์ค๋ ๋๋ก ํํฐ์ ์ ์ํํ๋ฉด์ ์ ์กํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์น๋ก ๋ฌถ์ด๋ ๋น๋๊ฐ ์ ๋ค.
(2) ์ปจ์๋จธ API
์ปจ์๋จธ๋ ์ ์ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ธ๋ก์ปค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ์ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์ปจ์๋จธ๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ ํ๋ก๋์์ ๋์ผํ๊ฒ ์นดํ์นด ํด๋ผ์ด์ธํธ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถ๊ฐํ์ฌ ์๋ฐ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๊ฒ์ด๋ค.
(2)-1 ์ปจ์๋จธ ์ด์ ๋ฐฉ์
ํ ํฝ์ ํํฐ์ ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ์ปจ์๋จธ๋ฅผ ์ด์ํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 2๊ฐ์ง์ด๋ค.
- 1๊ฐ ์ด์์ ์ปจ์๋จธ๋ก ์ด๋ฃจ์ด์ง ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ด์
- ํ ํฝ์ ํน์ ํํฐ์ ๋ง ๊ตฌ๋ ํ๋ ์ปจ์๋จธ๋ฅผ ์ด์
์ปจ์๋จธ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ธ ์ปจ์๋จธ๋ค์ ํ ํฝ์ 1๊ฐ ์ด์์ ํํฐ์ ์ ํ ๋น๋์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์๋ค.
- 1๊ฐ์ ํํฐ์ ์ ์ต๋ 1๊ฐ์ ์ปจ์๋จธ์ ํ ๋น ๊ฐ๋ฅํ๊ณ , 1๊ฐ์ ์ปจ์๋จธ๋ ์ฌ๋ฌ ๊ฐ์ ํํฐ์ ์ ํ ๋น๋ ์ ์๋ค. (์ปจ์๋จธ ๊ทธ๋ฃน์ ์ปจ์๋จธ ๊ฐ์ <= ๊ฐ์ ธ๊ฐ๊ณ ์ ํ๋ ํ ํฝ์ ํํฐ์ ๊ฐ์)
- ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ค๋ฅธ ์ปจ์๋จธ ๊ทธ๋ฃน๊ณผ ๊ฒฉ๋ฆฌ๋๋ฏ๋ก ๊ทธ๋ฃน๋ผ๋ฆฌ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ด๋ฌํ ํน์ง์ ์ต์ข ์ ์ฌ๋๋ ์ ์ฅ์์ ์ฅ์ ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋๋ก ๊ฐ๊ธฐ ๋ค๋ฅธ ์ ์ฅ์์ ์ ์ฅํ๋ ์ปจ์๋จธ๋ฅผ ๋ค๋ฅธ ์ปจ์๋จธ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์์ผ๋ก์จ ๊ฐ ์ ์ฅ์์ ์ฅ์ ์ ๊ฒฉ๋ฆฌ๋์ด ์ด์ํ ์ ์๋ค.
(2)-2 ์ปจ์๋จธ ์ฅ์ ๋ฐ์ ๋์ (๋ฆฌ๋ฒจ๋ฐ์ฑ)
๋ฆฌ๋ฒจ๋ฐ์ฑ
์ปจ์๋จธ ๊ทธ๋ฃน์ ํน์ ์ปจ์๋จธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ์ฅ์ ๊ฐ ๋ฐ์ํ ์ปจ์๋จธ์๊ฒ ํ ๋น๋ ํํฐ์ ์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ง ์์ ์ปจ์๋จธ์๊ฒ ์์ ๊ถ์ด ๋์ด๊ฐ๋ค. โ ๋ฆฌ๋ฒจ๋ฐ์ฑ(rebalancing)
๋ฆฌ๋ฒจ๋ฐ์ฑ์ด ๋ฐ์ํ๋ ์ํฉ
- ์ปจ์๋จธ๊ฐ ์ถ๊ฐ๋๋ ์ํฉ
- ์ปจ์๋จธ๊ฐ ์ ์ธ๋๋ ์ํฉ
์ปจ์๋จธ ์ค 1๊ฐ์ ์ด์๊ฐ ๋ฐ์ํ์ฌ ๋์์ ์ ํ๊ณ ์๋ค๋ฉด ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋ฅผ ํด์ํ๊ธฐ ์ํด ์ด์๊ฐ ๋ฐ์ํ ์ปจ์๋จธ๋ฅผ ์ปจ์๋จธ ๊ทธ๋ฃน์์ ์ ์ธํ์ฌ ๋ชจ๋ ํํฐ์ ์ด ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ฐ์ฉ์ฑ์ ๋์ฌ์ค๋ค.
๋ฆฌ๋ฒจ๋ฐ์ฑ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋์ค ์ธ์ ๋ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ฃน ์กฐ์ ์
๊ทธ๋ฃน ์กฐ์ ์(group coordinator)๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ๋ฐ๋์ํค๋ ์ญํ ์ ํ๋๋ฐ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ปจ์๋จธ๊ฐ ์ถ๊ฐ๋๊ณ ์ญ์ ๋ ๋๋ฅผ ๊ฐ์งํ๋ค. ์ด๋ ์นดํ์นด ๋ธ๋ก์ปค ์ค ํ ๋๊ฐ ๊ทธ๋ฃน ์กฐ์ ์ ์ญํ ์ ํ๋ค.
(2)-3 ์ปจ์๋จธ ๋ด๋ถ ๊ตฌ์กฐ
์คํ์ ์ปค๋ฐ
์ปจ์๋จธ๋ ๋ธ๋ก์ปค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋๊น์ง ๊ฐ์ ธ๊ฐ๋์ง ์ปค๋ฐ(commit)์ ํตํด ๊ธฐ๋กํ๋ค.
ํน์ ํ ํฝ์ ํํฐ์
์ ์ด๋ค ์ปจ์๋จธ ๊ทธ๋ฃน์ด ๋ช ๋ฒ์งธ ๊ฐ์ ธ๊ฐ๋์ง ๋ธ๋ก์ปค ๋ด๋ถ์ ์ฌ์ฉ๋๋ ๋ด๋ถ ํ ํฝ(_consumer_offsets)์ ๊ธฐ๋ก๋๋ค.
๋ง์ฝ ์ปจ์๋จธ ๋์ ์ด์๋ก, ์คํ์
์ปค๋ฐ์ ๊ธฐ๋ก ๋ชปํ๋ค๋ฉด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค๋ณต์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ปจ์๋จธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ์
์ปค๋ฐ์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฆํด์ผ๋ง ํ๋ค.
์คํ์ ์ปค๋ฐ์ ์ปจ์๋จธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ช ์์ , ๋น๋ช ์์ ์ผ๋ก ์ํํ ์ ์๋ค.
- ๋น๋ช
์ ์คํ์
์ปค๋ฐ : ์ผ์ ๊ฐ๊ฒฉ๋ง๋ค ์๋์ผ๋ก ์ปค๋ฐ (enable.auto.commit=true)
- poll() ๋ฉ์๋๊ฐ auto.commit.interval.ms์ ์ค์ ๋ ๊ฐ ์ด์์ด ์ง๋ฌ์ ๋ ๊ทธ ์์ ๊น์ง ์ฝ์ ๋ ์ฝ๋์ ์คํ์ ์ ์ปค๋ฐํจ
- poll() ๋ฉ์๋ ํธ์ถํ ๋ ์ปค๋ฐ์ ์ํํ๋ฏ๋ก ์ฝ๋์์ผ๋ก ์ปค๋ฐ ๊ด๋ จ ์ฝ๋ ๋ฐ๋ก ์์ฑํ ํ์ ์๋ค. ๋ค๋ง, poll() ๋ฉ์๋ ํธ์ถ ์ดํ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ ๋๋ ์ปจ์๋จธ ๊ฐ์ ์ข ๋ฃ ๋ฐ์ ์ ์ปจ์๋จธ๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต ๋๋ ์ ์ค๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ทจ์ฝํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
- ๋ช
์์ ์คํ์
์ปค๋ฐ : poll() ๋ฉ์๋ ํธ์ถ ์ดํ์ ๋ฐํ๋ฐ์ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๊ณ commitSync() ๋ฉ์๋๋ฅผ ํธ์ถ
- commitSync()๋ poll()๋ฅผ ํตํด ๋ฐํ๋ ๋ ์ฝ๋์ ๊ฐ์ฅ ๋ง์ง๋ง ์คํ์ ์ ๊ธฐ์ค์ผ๋ก ์ปค๋ฐ์ ์ํํจ
- commitSync()๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋ฐ ์์ฒญ์ ์ ์กํ๊ณ ์๋ต์ด ์ค๊ธฐ ์ ๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
์ปจ์๋จธ ๋ด๋ถ ๊ตฌ์กฐ
์ปจ์๋จธ๋ ์๋ฐ ๊ธฐ์ค poll() ๋ฉ์๋๋ฅผ ํตํด ๋ ์ฝ๋๋ค์ ๋ฐํ๋ฐ์ง๋ง, poll() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์์ ์ ํด๋ฌ์คํฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค์ง ์๋๋ค.
[ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๋ ๊ณผ์ ]
- ์ปจ์๋จธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด ๋ด๋ถ์์ Fetcher ์ธ์คํด์ค๊ฐ ์์ฑ๋จ
- poll() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ปจ์๋จธ๋ ๋ด๋ถ ํ์ ์๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํ์ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ
(3) ์ด๋๋ฏผ API
์ค์ ์ด์ํ๊ฒฝ์์ ์นดํ์นด ๋ด๋ถ ์ต์
์ ์ค์ ํ๊ณ ํ์ธํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ด๋ถ ์ต์
์ ํ์ธํ๋ ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ ๋ธ๋ก์ปค ํ ๋์ ์ ์๊ฐ์ฌ ์นดํ์นด ๋ธ๋ก์ปค ์ต์
์ ํ์ธํ๋ ๊ฒ์ด์ง๋ง ๋ฒ๊ฑฐ๋กญ๋ค. ์นดํ์นด ์ปค๋งจ๋ ๋ผ์ธ ์ธํฐํ์ด์ค๋ก ๋ช
๋ น์ ๋ด๋ ค ํ์ธํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง ์ผํ์ฑ ์์
์ด๋ค.
์นดํ์นด ํด๋ผ์ด์ธํธ์์๋ ๋ด๋ถ ์ต์ ๋ค์ ์ค์ ํ๊ฑฐ๋ ์กฐํํ๊ธฐ ์ํด AdminClient ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค. ํด๋น ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ ์ต์ ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ ์๋ํํ ์ ์๋ค.
[ AdminClient ๊ธฐ๋ฅ ]
- ๋ธ๋ก์ปค ์ ๋ณด ์กฐํ
- ํ ํฝ ๋ฆฌ์คํธ ์กฐํ
- ์ปจ์๋จธ ๊ทธ๋ฃน ์กฐํ
- ์ ๊ท ํ ํฝ ์์ฑ
- ํํฐ์ ๊ฐ์ ๋ณ๊ฒฝ
- ์ ๊ทผ ์ ์ด ๊ท์น ์์ฑ
'#๏ธโฃ Data Engineering > Kafka' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kafka] Kafka ๊ฐ๋ ๊ณผ ๊ตฌ์ฑ์์ ๋ฐ ์๋ฆฌ (0) | 2023.03.03 |
---|---|
[Kafka] ํ ํฝ๊ณผ ํํฐ์ , ๋ ์ฝ๋ (0) | 2023.02.13 |
[Kafka] Kafka ๊ฐ๋ ๊ณผ ์ปดํฌ๋ํธ (0) | 2023.02.13 |