๐ก ์ด๋ฒ ํฌ์คํ ์์๋ Partitioner & Partition์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Topic์ ์์ฑํ ๋ ํํฐ์ ์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ํ ํฝ์ ๋ํ 1๊ฐ์ ํํฐ์ ์ด ์์ฑ์ด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํ ํฝ์ 1๊ฐ ์ด์์ ํํฐ์ ์ผ๋ก ๊ตฌ์ฑ์ด ๋๋ค๊ณ ๋งํ ์ ์์ผ๋ฉฐ, ํํฐ์ ์ ๊ทธ๋ฃน์ด๋ผ๊ณ ๋งํ ์๋ ์์ต๋๋ค.
์์ ๊ฐ์ด ํ๋์ ํ ํฝ์ ๋ํด ํํฐ์ ์ด ์ฌ๋ฌ ๊ฐ ๊ตฌ์ฑ๋์ด ์์ ๊ฒฝ์ฐ, ๊ฐ ํํฐ์ ์ 0๋ฒ๋ถํฐ ์์ํด์ ์์ฐจ์ ์ผ๋ก ์ด๋ฆ์ด ์ง์ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ํํฐ์ ์ producer๊ฐ ๋ณด๋ผ ๋ฉ์์ง๊ฐ ์ ์ฅ๋ฉ๋๋ค.
์์ Producer ์ ๋ฆฌ ํฌ์คํ ์์ Producer๊ฐ kafka๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋ ํน์ ํ ํฝ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค๊ณ ํ์์ต๋๋ค.
ํ์ง๋ง ์กฐ๊ธ ๋ ์ ํํ๊ฒ ๋งํ์๋ฉด ํน์ ํ ํฝ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ ํน์ ํ ํฝ์ ํน์ ํํฐ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์์ ๊ฐ์ด ํํฐ์ ์ด ์ฌ๋ฌ ๊ฐ ์์ ๊ฒฝ์ฐ ํ๋ก๋์๊ฐ ์ด๋ ํํฐ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ผ ํ ์ง ๊ธฐ์ค์ ์ ํด์ผ ํ๋๋ฐ, ์นดํ์นด์์๋ ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์, ์คํฐํค ํํฐ์ ๋ ์ด 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
๋จผ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋ key๊ฐ ์์ ๊ฒฝ์ฐ ํด๋น key์ hash๊ฐ์ ํตํด ํํฐ์ ์ ํ ๋นํ๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง key๋ฅผ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ์ฆ, key๊ฐ null์ผ ๊ฒฝ์ฐ์๋ ์๋์ ๊ฐ์ด kafka ๋ฒ์ ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ํํฐ์ ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฆ ๋๋ค.
ใkafka 2.4 ๋ฒ์ ์ด์ : Round Robin (๋ผ์ด๋ ๋ก๋น)
ใkafka 2.4 ๋ฒ์ ์ดํ : Sticky Partitioning (์คํฐํค ํํฐ์ ๋)
์ ๊ทธ๋ฆผ์ ์ผ์ชฝ์ด ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ด๊ณ ์ค๋ฅธ์ชฝ์ ์คํฐํค ํํฐ์ ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ผ์ด๋ ๋ก๋น์ ๋ง ๊ทธ๋๋ก ์์ฐจ์ ์ผ๋ก ๋์๊ฐ๋ฉฐ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ๋ฐฉ์์ ๋๋ค.
๋ฐ๋ฉด, ์คํฐํค ํํฐ์ ๋์ ์ฒ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ํํฐ์ ์ ๊ณ์ ๋ฉ์์ง๋ฅผ ๋์ ํ์ฌ ๋จผ์ batch๋ฅผ ์ฑ์ฐ๋ ์ ๋ต์ ๋๋ค.
์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋จผ์ kafka์ ๋ฐฐ์น ์ ์ก์ด๋ผ๋ ๊ฐ๋ ์ ์ดํดํด์ผ ํฉ๋๋ค.
์ด ๋ถ๋ถ์ ๋ํด์๋ Producer ํฌ์คํ ์์ ์ ๋ฆฌํด๋์์ผ๋ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
kafka๋ ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋ค๊ณ ํด์ ์ฆ์ kafka ์๋ฒ๋ก ๋ณด๋ด์ง ์์ต๋๋ค.
ํํฐ์ ์ ๋ฉ์์ง๊ฐ ์ ์ฅ๋ ๋ batch ๋๋ accumulator๋ผ๋ ์์ญ์ ์ ์ฅ์ด ๋๋๋ฐ ์ด ์์ญ์ด ๊ฐ๋ ์ฐจ๊ฑฐ๋ ๋๋ ์ผ์ ์๊ฐ ๋์ ๊ธฐ๋ค๋ฆฐ ํ์ ๊ทธ๋๊น์ง ์ ์ฅ๋์ด ์๋ ๋ฉ์์ง๋ฅผ ํ๊บผ๋ฒ์ ์ ์กํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ํํฐ์ ๋์ ํ๊ฒ ๋๋ฉด ๋ฉ์์ง๋ ์ด 6๊ฐ๊ฐ ์ ์ฅ๋์์ง๋ง ์์ง ์ด๋ ๊ณณ๋ batch, accumulator ์์ญ์ด ๊ฐ๋ ์ฐจ์ง ์์๊ธฐ ๋๋ฌธ์ kafka ์๋ฒ๋ก ๋ฉ์์ง๊ฐ ์ ์ก๋์ง ์์ ๊ฒ์ ๋๋ค.
์คํฐํค ํํฐ์ ๋์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฒ์ ์ ์ฅ๋๋ ํํฐ์ ์ batch๋ฅผ ๋จผ์ ์ฑ์ ๋ฉ์์ง๊ฐ kafka ์๋ฒ๋ก ์ ์ก๋ ์ ์๋๋ก ํฉ๋๋ค.
์ด๋ฅผ ์ฝ๋๋ก ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
๋ฉ์์ง๋ฅผ ํน์ ํํฐ์ ์ ์ ์ฅํ๋๋ก ํ๋ ค๋ฉด ํด๋น ๊ฐ์ฒด๋ Partitioner ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด์ฌ์ผ ํฉ๋๋ค.
Kafka์์๋ ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์, ์คํฐํค ํํฐ์ ๋ ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ ํํฐ์ ๋๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
ใRoundRobinPartitioner: ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์
ใUniformStickyPartitioner: ์คํฐํค ํํฐ์ ๋ ๋ฐฉ์
ใDefaultPartitioner: ๊ธฐ๋ณธ ํํฐ์ ๋
๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ ํํฐ์ ๋์ธ DefaultPartitioner์ partition() ๋ฉ์๋๋ฅผ ํ์ธํด ๋ณด๋ฉด key๊ฐ null์ผ ๊ฒฝ์ฐ ์คํฐํค ํํฐ์ ๋ ๋ฐฉ์์ ์ ์ฉํ๋๋ก ๋์ด ์์ต๋๋ค.
๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ด๋ , ์คํฐํค ํํฐ์ ๋ ๋ฐฉ์์ด๋ ๊ฒฐ๊ตญ ํด๋น ํํฐ์ ์ batch๊ฐ ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด ๋ค์ ํํฐ์ ์ ์ง์ ํด์ผ ํ๋๋ฐ ์ด ๋ถ๋ถ์ด ์ด๋ป๊ฒ ๊ตฌํ๋์ด ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
KafkaProducer์์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ doSend() ๋ฉ์๋๋ฅผ ํ์ธํด ๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ก์ง์ ํ์ธํ ์ ์์ต๋๋ค.
์ฒ์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ ๋๋ accumulator์ append() ๋ฉ์๋์ abortOnNewBatch๋ฅผ true๋ก ์ ๋ฌํ๊ณ ์์ต๋๋ค.
abortOnNewBatch๊ฐ true๋ก ์ ๋ฌ๋ ๊ฒฝ์ฐ RecordAppendResult ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ์ฌ ๋ฐํํ๋๋ฐ ์ด๋ abortForNewBatch ๊ฐ์ true๋ก ์ค์ ํ๊ณ ์์ต๋๋ค.
์ด ๊ฐ์ด true๋ก ์ค์ ๋๋ฉด partitioner.onNewBatch() ๋ฉ์๋๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์ ์ฅํ ๋ค์ ํํฐ์ ์ ๊ฐ์ ธ์ค๋๋ก ํ๊ณ ์์ต๋๋ค.
์ฒ์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ ๋๋ ๋น์ฐํ ํํฐ์ ์ ์ง์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ abortOnNewBatch ๊ฐ์ true๋ก ์ค์ ํ์ฌ ํํฐ์ ์ ๊ฐ์ ธ์ค๋๋ก ํ์ผ๋ฉฐ, ์ดํ ์๋ abortOnNewBatch ๊ฐ์ false๋ก ์ง์ ํ์ฌ ๊ฐ์ ธ์จ ํํฐ์ ์ ๊ณ์ํด์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋๋ก ํ๊ณ ์์ต๋๋ค.
Custom Partitioner
partitioner๋ฅผ ์ง์ ๋ง๋ค๊ธฐ ์ํด์๋ ์์์ ์ค๋ช ํ Partitoner ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Producer property ์ค์ ์ ์๋์ ๊ฐ์ด ์์ฑํ Partitioner์ class path๋ฅผ ์ ๋ ฅํด ์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
'Kafka' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Consumer - 1 (0) | 2023.04.16 |
---|---|
Producer - 2 (0) | 2023.04.09 |
kafka CLI ์ฌ์ฉํ๊ธฐ - kafka-configs.(sh | bat) (0) | 2023.04.08 |
kafka CLI ์ฌ์ฉํ๊ธฐ - kafka-consumer-group.(sh | bat) (0) | 2023.04.08 |
kafka CLI ์ฌ์ฉํ๊ธฐ - kafka-dump-log (0) | 2023.04.04 |
๋๊ธ