[MSA] kafka - producer
Categories: MSA
Tags: kafka, MSA, SpringCloud
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
์ธํ๋ฐ Dowon Lee๋์ Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
(MSA) ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค.๐
Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
(MSA) ๊ฐ์ ๋ค์ผ๋ฌ ๊ฐ๊ธฐ๐ฉโ๐ซ
โ
์ถ๊ฐ๋ก kafka ์ ๋ํด ์ ์ ๋ฆฌ๋ ๋ธ๋ก๊ทธ๊ฐ ์์ด ์ฐธ๊ณ ํ์์ต๋๋ค.ย ยป
์ธ์ ๋๊น๊น
์นดํ์นด ํ๋ก๋์(Kafka Producer)
- ์นดํ์นด ํ๋ก๋์๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ฌ ์นดํ์นด ๋ธ๋ก์ปค๋ก ์ ์กํ๋ ์ญํ ์ ํ๋ค.
- ํ๋ก๋์๋ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ์ฌ ๋ฐ์ดํธ ๋ฐฐ์ด ํํ๋ก ๋ธ๋ก์ปค์ ์ ๋ฌํ๋ฉฐ, ๋ธ๋ก์ปค๋ ์ด๋ฅผ ์ ์ฅํ๊ณ ์ปจ์๋จธ๋ ์ญ์ง๋ ฌํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ๋ค.
1๏ธโฃ ํ๋ก๋์์ ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ์
์ง๋ ฌํ(Serialization)
- ์ง๋ ฌํ
- ํ๋ก๋์๋ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ์ฌ ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ๋ณํํ๋ค.
- ์ ์ก ๋ฐ ์ ์ฅ
- ์ง๋ ฌํ๋ ๋ฐ์ดํธ ๋ฐฐ์ด์ ๋ธ๋ก์ปค์ ํํฐ์ ์ ์ ์ฅ๋๋ฉฐ, ์ปจ์๋จธ๋ ์ด๋ฅผ ๋ฐ์ ์ญ์ง๋ ฌํํ์ฌ ์ฌ์ฉํ๋ค.
- ์ง๋ ฌํ ํด๋์ค ์ง์
- ํ๋ก๋์ ์ค์ ์
key.serializer
์value.serializer
๋ฅผ ํตํด ์ง๋ ฌํ ํด๋์ค๋ฅผ ์ง์ ํด์ผ ํ๋ค.
- ํ๋ก๋์ ์ค์ ์
2๏ธโฃ ๋ฉ์์ง ํค(Message Key) ์ฌ์ฉ ์ฌ๋ถ์ ๋ฐ๋ฅธ ์ ์ก
- ๋ฉ์์ง ํค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
- ์คํฐํค ํํฐ์
๋(Sticky Partitioning)
- ๋ฉ์์ง ํค๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์คํฐํค ํํฐ์ ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค
- ํน์ง: ํ๋์ ๋ฐฐ์น์ ๋ฉ์์ง๋ฅผ ๋น ๋ฅด๊ฒ ์ฑ์ ํน์ ํํฐ์ ์ผ๋ก ์ ์ก
- ์์ ๋ณด์ฅ ๋ฏธํก
- ํํฐ์ ์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ ๋ฉ์์ง์ ์ ์ก ์์๊ฐ ๋ณด์ฅ๋์ง ์์ ์ ์๋ค.
- ์คํฐํค ํํฐ์
๋(Sticky Partitioning)
- ๋ฉ์ธ์ง ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ํด์ ํํฐ์
๋
- ๋ฉ์์ง ํค๋ฅผ ํด์ํ์ฌ ํน์ ํํฐ์ ์ ๋งคํํ๋ค.
- ์์ ๋ณด์ฅ
- ๋์ผํ ๋ฉ์์ง ํค๋ ํญ์ ๊ฐ์ ํํฐ์ ์ ์ ์ฅ๋๋ฏ๋ก ์์๊ฐ ๋ณด์ฅ๋จ.
- ํํฐ์
๊ฐ์ ๋ณํ ์ ๋ฌธ์ ์ :
- ํํฐ์ ๊ฐ์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ ธ ๋ฉ์์ง ์์๊ฐ ๊นจ์ง ์ ์๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: ์ปค์คํ ํํฐ์ ๋๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์ด๊ธฐ ํํฐ์ ์๋ฅผ ์ถฉ๋ถํ ์ค์ ํ๋ค.
- ํด์ ํํฐ์
๋
3๏ธโฃ ํ๋ก๋์์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋์ ์๋ฆฌ
ํ๋ก๋์ ๋ฐ์ดํฐ ์ ์ก ํ๋ฆ
- ProducerRecord ์์ฑ: ์ ์กํ ๋ฉ์์ง๋ฅผ ์์ฑ
- send() ํธ์ถ: ๋ฉ์์ง๋ฅผ ์ ์กํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ํธ์ถ
- ํํฐ์ ๋(Partitioner): ๋ฉ์์ง๋ฅผ ํํฐ์ ์ ๋งคํ
- Accumulator: ํ ํฝ๋ณ๋ก ๋ฐฐ์น๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- Sender: ๋ฐฐ์น๋ฅผ ์นดํ์นด ํด๋ฌ์คํฐ๋ก ์ ์กํ๋ค
์ฃผ์ ๊ตฌ์ฑ ์์
- ํํฐ์
๋(Partitioner):
- ๋ฉ์์ง๋ฅผ ํน์ ํํฐ์ ์ ํ ๋นํ๋ ๋ก์ง์ ๋ด๋น
- ๊ธฐ๋ณธ๊ฐ์
DefaultPartitioner
์ด๋ฉฐ, ํ์์ ๋ฐ๋ผ ์ปค์คํ ํํฐ์ ๋๋ฅผ ๊ตฌํํ ์ ์๋ค.
- Accumulator:
- ์ ์กํ๊ธฐ ์ ๋ฉ์์ง๋ฅผ ๋ฒํผ์ ๋ชจ์ ๋ฐฐ์น๋ฅผ ์์ฑ
- ํจ์จ์ ์ธ ์ ์ก์ ์ํด ๋ฐฐ์น ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
4๏ธโฃ ํ๋ก๋์ ์ฃผ์ ์ต์
ํ์ ์ต์
- bootstrap.servers
- ์นดํ์นด ํด๋ฌ์คํฐ์ ๋ธ๋ก์ปค ์ ๋ณด๋ฅผ ์ง์ ํ๋ค.
'ํธ์คํธ์ด๋ฆ:ํฌํธ'
ํ์์ผ๋ก ํ๋ ์ด์ ์ ๋ ฅ
- key.serializer
- ๋ฉ์์ง ํค๋ฅผ ์ง๋ ฌํํ๋ ํด๋์ค
- value.serializer
- ๋ฉ์์ง ๊ฐ์ ์ง๋ ฌํํ๋ ํด๋์ค
์ ํ ์ต์
- acks
- ์ ์กํ ๋ฐ์ดํฐ์ ํ์ธ ๋ฒ์๋ฅผ ์ค์ ํฉ๋๋ค.
- 0: ํ์ธํ์ง ์๊ณ ๋ฐ๋ก ๋ค์ ์์ ์งํ.
- 1(๊ธฐ๋ณธ๊ฐ): ๋ฆฌ๋ ํํฐ์ ์ ์ ์ฅ๋๋ฉด ์ฑ๊ณต์ผ๋ก ํ๋จ.
- all(-1): ๋ชจ๋ ISR์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉด ์ฑ๊ณต์ผ๋ก ํ๋จ.
- buffer.memory
- ๋ฐฐ์น๋ก ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฒํผ ๋ฉ๋ชจ๋ฆฌ ์์ ์ง์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ 32MB์ ๋๋ค.
- retries
- ์ ์ก ์คํจ ์ ์ฌ์๋ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ 2147483647(๋ฌด์ ํ)์ ๋๋ค.
- batch.size
- ๋ฐฐ์น๋ก ์ ์กํ ๋ ์ฝ๋์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ 16KB์ ๋๋ค.
- linger.ms
- ๋ฐฐ์น๋ฅผ ์ ์กํ๊ธฐ ์ ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ต๋ ์๊ฐ์ ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ 0ms์ ๋๋ค.
- partitioner.class
- ํํฐ์ ๋ ํด๋์ค๋ฅผ ์ง์ ํฉ๋๋ค.
- enable.idempotence
- ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ก ๋์ํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํฉ๋๋ค.
- ์ค๋ณต ๋ฉ์์ง ์ ์ก์ ๋ฐฉ์งํฉ๋๋ค.
- transactional.id
- ํธ๋์ญ์ ํ๋ก๋์๋ฅผ ์ฌ์ฉํ ๋ ๊ณ ์ ํ ํธ๋์ญ์ ID๋ฅผ ์ง์ ํฉ๋๋ค.
5๏ธโฃ ISR(In-Sync Replicas)๊ณผ acks ์ต์
ISR(In-Sync Replicas)
- ์ ์: ๋ฆฌ๋ ํํฐ์ ๊ณผ ์์ ํ ๋๊ธฐํ๋ ํ๋ก์ ํํฐ์ ์ ์งํฉ
- ์ญํ : ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ๋ฆฌ๋ ์ฅ์ ์ ISR ๋ด ํ๋ก์ ์ค ํ๋๊ฐ ๋ฆฌ๋๋ก ์น๊ฒฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง:
replica.lag.time.max.ms
์ค์ ์ผ๋ก ํ๋ก์์ ๋๊ธฐํ ์ํ๋ฅผ ํ์ธํ๋ค.
acks ์ต์ ์์ธ ์ค๋ช
- acks=0
- ๋ฆฌ๋ ํํฐ์ ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ ์ก
- ์ ์ก ์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฅด์ง๋ง ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- acks=1
- ๋ฆฌ๋ ํํฐ์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉด ์ฑ๊ณต์ผ๋ก ํ๋จ
- ํ๋ก์ ํํฐ์ ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- acks=all(-1)
- ISR์ ํฌํจ๋ ๋ชจ๋ ํํฐ์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉด ์ฑ๊ณต์ผ๋ก ํ๋จํฉ
min.insync.replicas
์ค์ ๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์์ ์ฑ์ ๋์ธ๋ค.
min.insync.replicas
- ์ญํ : ISR ๋ด ์ต์ ๋ช ๊ฐ์ ํํฐ์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์ผ ํ๋์ง ์ง์ ํ๋ค.
- ์ฃผ์์ฌํญ
min.insync.replicas
๋ ๋ณต์ ๊ฐ์๋ณด๋ค ์์์ผ ํ๋ค.- ๋ธ๋ก์ปค ์ฅ์ ์ ์๋น์ค ์ค๋จ์ ๋ฐฉ์งํ๋ ค๋ฉด ์ ์ ํ ๊ฐ์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
6๏ธโฃ ์ ์ก ๋ฐ ์ฌ์ ์ก ๋ฉ์ปค๋์ฆ
- Record Accumulator ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ
max.block.ms
๋งํผ ๋๊ธฐ ํ์๋ ์ ์กํ์ง ๋ชปํ๋ฉดTimeoutException
์ด ๋ฐ์
- Sender ์ค๋ ๋ ๋์
linger.ms
๋์ ๋๊ธฐ ํ ๋ฐฐ์น๋ฅผ ์ ์ก- ๋ธ๋ก์ปค์ ์๋ต์
request.timeout.ms
๋งํผ ๊ธฐ๋ค๋ฆฐ๋ค. - ์๋ต์ด ์์ผ๋ฉด ์ฌ์๋ํ๊ฑฐ๋
TimeoutException
์ด ๋ฐ์ํ๋ค.
- ์ฌ์๋ ๋ก์ง
retries
ํ์๋งํผ ์ฌ์๋ํ๋ฉฐ, ๊ฐ ์ฌ์๋ ์ฌ์ด์retry.backoff.ms
๋งํผ ๋๊ธฐํ๋ค.
- ์ต๋ ์ ์ก ์๊ฐ
delivery.timeout.ms
์ค์ ์ผ๋ก ๋ฉ์์ง ์ ์ก์ ํ์ฉ๋ ์ต๋ ์๊ฐ์ ์ง์ ํ๋ค.
Leave a comment