Patitioner

Kafka์˜ ํŒŒํ‹ฐ์…”๋„ˆ(Partitioner)๋Š” ํ”„๋กœ๋“€์„œ(Producer)๊ฐ€ ์ „์†กํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํŠน์ • ํŒŒํ‹ฐ์…˜์— ํ• ๋‹นํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. ์ด๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ Kafka ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฐฐ๋˜๊ณ  ์ฒ˜๋ฆฌ๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ๊ณผ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ํŒŒํ‹ฐ์…”๋„ˆ๋Š” ๋ฉ”์‹œ์ง€ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒํ‹ฐ์…˜์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ๋ณ„๋„์˜ ์ „๋žต์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ„๋ฐฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒํ‹ฐ์…”๋„ˆ?

๋ฉ”์‹œ์ง€ ๋ถ„๋ฐฐ ๊ฒฐ์ •

ํŒŒํ‹ฐ์…”๋„ˆ๋Š” ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ณด๋‚ธ ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋–ค ํŒŒํ‹ฐ์…˜์— ๊ธฐ๋กํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ์ด๋•Œ ๊ณ ๋ ค๋˜๋Š” ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  • ๋ฉ”์‹œ์ง€ ํ‚ค(Key): ๋ฉ”์‹œ์ง€๊ฐ€ ํŠน์ • ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒํ‹ฐ์…˜์ด ๊ฒฐ์ •๋œ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•ญ์ƒ ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์— ์ €์žฅ๋˜์–ด ์†Œ๋น„์ž(Consumer) ์ธก์—์„œ ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • ํŒŒํ‹ฐ์…˜ ์ˆ˜: ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํŒŒํ‹ฐ์…”๋„ˆ์˜ ๊ณ„์‚ฐ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ํŒŒํ‹ฐ์…˜ ์ˆ˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ™•์žฅ์„ฑ๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰์— ์˜ํ–ฅ์„ ์ค€๋‹ค.

๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”

ํŒŒํ‹ฐ์…”๋„ˆ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ํŒŒํ‹ฐ์…˜์— ๋ฉ”์‹œ์ง€๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜์—ฌ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค. ์ด๋Š” ํŠน์ • ํŒŒํ‹ฐ์…˜์ด๋‚˜ ๋ธŒ๋กœ์ปค์— ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ

๋™์ผํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ฉ”์‹œ์ง€๊ฐ€ ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์— ์ €์žฅ๋˜๋„๋ก ํ•จ์œผ๋กœ์จ, ์†Œ๋น„์ž๋Š” ํ•ด๋‹น ํŒŒํ‹ฐ์…˜์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ๋‚˜ ๊ธˆ์œต ๊ฑฐ๋ž˜์™€ ๊ฐ™์ด ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์—์„œ ํ•„์ˆ˜์ ์ด๋‹ค.

ํŒŒํ‹ฐ์…˜ ์ „๋žต

Kafka์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ํŒŒํ‹ฐ์…˜์— ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ „๋žต์„ ์ œ๊ณตํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” DefaultPartitioner๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ํ•„์š”์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ์ •์˜ ํŒŒํ‹ฐ์…”๋„ˆ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ฃผ์š” ํŒŒํ‹ฐ์…˜ ์ „๋žต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

1. ๋ผ์šด๋“œ ๋กœ๋นˆ(Round Robin) ํŒŒํ‹ฐ์…”๋‹

๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ ํŒŒํ‹ฐ์…˜์— ๋ถ„๋ฐฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ฉ”์‹œ์ง€ ํ‚ค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋‚˜ null ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ฉ”์‹œ์ง€์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

์žฅ์ 

  • ๋ถ€ํ•˜ ๋ถ„์‚ฐ: ๋ชจ๋“  ํŒŒํ‹ฐ์…˜์— ๋ฉ”์‹œ์ง€๊ฐ€ ๊ณ ๋ฅด๊ฒŒ ๋ถ„๋ฐฐ๋˜๋ฏ€๋กœ ํŠน์ • ํŒŒํ‹ฐ์…˜์— ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋‹จ์ˆœ์„ฑ: ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹จ์ 

  • ์ˆœ์„œ ๋ณด์žฅ ์–ด๋ ค์›€: ํŠน์ • ํ‚ค์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค.

  • ํŒŒํ‹ฐ์…˜ ์ˆ˜ ๋ณ€๊ฒฝ ์‹œ ์žฌ๋ถ„๋ฐฐ ๋ฌธ์ œ: ํŒŒํ‹ฐ์…˜ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฉ”์‹œ์ง€์˜ ๋ถ„๋ฐฐ ํŒจํ„ด์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

ํ‚ค ๊ธฐ๋ฐ˜ ๋ถ„๋ฐฐ๊ฐ€ ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ: ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ , ๋‹จ์ˆœํžˆ ๋ถ€ํ•˜๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ์‹œํ‚ค๊ณ ์ž ํ•  ๋•Œ ์ ํ•ฉํ•˜๋‹ค.

๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ: ๋‹ค์–‘ํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ํšจ๊ณผ์ ์ด๋‹ค.

2. ํ•ด์‹œ ๊ธฐ๋ฐ˜(Hash-based) ํŒŒํ‹ฐ์…”๋‹

ํ•ด์‹œ ๊ธฐ๋ฐ˜ ํŒŒํ‹ฐ์…”๋‹์€ ๋ฉ”์‹œ์ง€์˜ ํ‚ค์— ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ํŒŒํ‹ฐ์…˜์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ partition = hash(key) % number_of_partitions ๊ณต์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

์žฅ์ 

  • ํ‚ค ๊ธฐ๋ฐ˜ ์ˆœ์„œ ๋ณด์žฅ: ๋™์ผํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ฉ”์‹œ์ง€๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์— ์ €์žฅ๋˜๋ฏ€๋กœ, ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ถ€ํ•˜ ๋ถ„์‚ฐ: ํ‚ค๊ฐ€ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์–ด ์žˆ๋‹ค๋ฉด ํŒŒํ‹ฐ์…˜ ๊ฐ„ ๋ถ€ํ•˜๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ๋œ๋‹ค.

๋‹จ์ 

  • ํŒŒํ‹ฐ์…˜ ์ˆ˜ ๋ณ€๊ฒฝ ์‹œ ๋ฌธ์ œ: ํŒŒํ‹ฐ์…˜ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ•ด์‹œ ๊ฐ’์ด ์žฌ๊ณ„์‚ฐ๋˜์–ด ๊ธฐ์กด ํ‚ค์˜ ํŒŒํ‹ฐ์…˜ ๋งคํ•‘์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ ์žฌ๋ถ„๋ฐฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • ํ•ด์‹œ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ: ํŠน์ • ํ‚ค์— ๋Œ€ํ•œ ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ํŒŒํ‹ฐ์…˜์— ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋  ์ˆ˜ ์žˆ๋‹ค.

ํ‚ค ๊ธฐ๋ฐ˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ: ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๋ณ„ ์ด๋ฒคํŠธ ๋กœ๊ทธ๋‚˜ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ ๋“ฑ์—์„œ ๋™์ผํ•œ ํ‚ค์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋‹ค.

ํ‚ค๊ฐ€ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜๋Š” ๊ฒฝ์šฐ: ํ‚ค์˜ ํ•ด์‹œ ๊ฐ’์ด ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์–ด ํŒŒํ‹ฐ์…˜ ๊ฐ„ ๋ถ€ํ•˜๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ๋  ๋•Œ ํšจ๊ณผ์ ์ด๋‹ค.

3. ์Šคํ‹ฐํ‚ค ํŒŒํ‹ฐ์…”๋‹(Sticky Partitioner)

Kafka 2.4๋ถ€ํ„ฐ ๋„์ž…๋œ ์Šคํ‹ฐํ‚ค ํŒŒํ‹ฐ์…”๋‹์€ ๋ฐฐ์น˜ ๋‹จ์œ„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์— ์ „์†กํ•˜์—ฌ ๋ ˆ์ฝ”๋“œ ์ง‘ํ•ฉ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์ • ํฌ๊ธฐ๋‚˜ ๋ฐฐ์น˜ ๋‹จ์œ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋™์ผ ํŒŒํ‹ฐ์…˜์— ์ „์†กํ•œ๋‹ค.

์žฅ์ 

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ: ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์œผ๋กœ์˜ ์—ฐ์†์ ์ธ ์ „์†ก์œผ๋กœ ์ธํ•ด ๋ธŒ๋กœ์ปค์™€์˜ ํ†ต์‹  ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ํšจ์œจ์ ์ธ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ: ๋ฐฐ์น˜ ๋‹จ์œ„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ๋ถ€ํ•˜ ๋ถˆ๊ท ํ˜• ๊ฐ€๋Šฅ์„ฑ: ์žฅ๊ธฐ๊ฐ„ ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ํŒŒํ‹ฐ์…˜์— ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์ˆœ์„œ ๋ณด์žฅ ๋ฌธ์ œ: ๋ฐฐ์น˜ ๋‹จ์œ„๋กœ ์ „์†ก๋˜๋ฏ€๋กœ, ๊ฐœ๋ณ„ ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ ๋ณด์žฅ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์š”๊ตฌ๋˜๋Š” ๊ฒฝ์šฐ: ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

ํ†ต์‹  ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ ์ž ํ•  ๋•Œ: ๋ธŒ๋กœ์ปค์™€์˜ ํ†ต์‹  ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ ํ•ฉํ•˜๋‹ค.

Last updated