๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“š ์‹œ๋ฆฌ์ฆˆ/- ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ ๋ฐฐ์›Œ๋ณด๋Š” kafka

[ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ ๋ฐฐ์›Œ๋ณด๋Š” kafka] 7. ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ consumer group ๊ณผ rebalancing ์•Œ์•„๋ณด๊ธฐ

by Wonit 2023. 9. 7.

ํ•ด๋‹น ์‹œ๋ฆฌ์ฆˆ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์†Œ์Šค์ฝ”๋“œ๋Š” 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 ์‹ฌํ™” ์„ธ์…˜ ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๋ฆฌ์ฆˆ ๋ชฉ์ฐจ

  1. ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ
  2. kafka ๋น ๋ฅด๊ฒŒ ํ›‘์–ด๋ณด๊ณ  ์•„๋Š”์ฒดํ•˜๊ธฐ
  3. kafka ์ปจ์…‰๊ณผ ์šฉ์–ด ์ •๋ฆฌ
  4. ํ•™์Šตํ…Œ์ŠคํŠธ ์ค€๋น„ํ•˜๊ธฐ
  5. ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ kafka producer ์•Œ์•„๋ณด๊ธฐ
  6. ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ kafka consumer ์•Œ์•„๋ณด๊ธฐ
  7. ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ partitioning ์•Œ์•„๋ณด๊ธฐ
  8. ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ consumer group ๊ณผ rebalancing ์•Œ์•„๋ณด๊ธฐ <-- ํ˜„์žฌ ๊ธ€

ํ•™์Šต์˜ ๋‹จ๊ณ„๋ณ„ ์ˆœ์„œ๋กœ ๋ชฉ์ฐจ๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ฑ•ํ„ฐ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค


consumer group

 

์นดํ”„์นด์—๋Š” ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•œ๋‹ค.

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจ์Šˆ๋จธ๋“ค์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.

 

์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์€ ๋‹จ์ˆœํ•˜๊ฒŒ ์ปจ์Šˆ๋จธ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋Š˜๋ฆฐ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์€ single logical consumer ์ด๋‹ค.

 

์‹ค์ œ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ consumer ๋ฅผ physical consumer ๋ผ๊ณ  ํ•  ๋•Œ, ๋™์ผํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” consumer ๋“ค์„ ๋…ผ๋ฆฌ์  ํ•˜๋‚˜๋กœ ๋ฌถ์–ด๋†“์€๊ฒŒ ๋ฐ”๋กœ consumer group ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ๋งŒ ๋งํ•ด์„œ๋Š” ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž

 

consumer scaling ๊ณผ consumer group ์˜ ๊ด€๊ณ„

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด consumer ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž

 

 

์ด consuemr ๋Š” ํ•˜๋‚˜์˜ ํ† ํ”ฝ์— ๋Œ€ํ•ด์„œ message 2๋ฒˆ๊นŒ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•˜์˜€๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  message 3๋ฒˆ์— ๋Œ€ํ•ด์„œ ์ด์ œ consume ์„ ํ•  ์ฐจ๋ก€์ธ๋ฐ, ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด consumer ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

 

 

์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํ•˜๊ฒŒ ์ปจ์Šˆ๋จธ๋งŒ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

์•ž์„œ ์ปจ์Šˆ๋จธ๊ฐ€ 1๋ฒˆ๊ณผ 2๋ฒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์˜€์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๋Š” ์•ž์„  ์ปจ์Šˆ๋จธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋˜๋‹ค์‹œ 1๋ฒˆ๊ณผ 2๋ฒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ consumer group ๊ฐœ๋…์ด ๋“ฑ์žฅํ•œ๋‹ค๋ฉด ์ด์•ผ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

 

consumer group ์€ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ด์•ผ๊ธฐํ•˜๋ฉด, single logical consumer ์ด๋‹ค

 

์นดํ”„์นด ๋ธŒ๋กœ์ปค ์ž…์žฅ์—์„œ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ปจ์Šˆ๋จธ๋กœ, ๋™์ผํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฌผ๋ฆฌ์  ์ปจ์Šˆ๋จธ๋“ค์„ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค

 

 

์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์— ์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์†Œ๋น„๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ์ง€์ ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ์‹œ๊ฐ„์— ์ด์•ผ๊ธฐํ•  offset ๊ณผ commit ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค. ๋‹ค์Œ ๊ธ€๋„ ๊ณ„์† ํ•™์Šตํ•œ๋‹ค๋ฉด ๋” ๊นŠ์€ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค

 

์ด๋ ‡๊ฒŒ ์นดํ”„์นด๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ์ปจ์Šˆ๋จธ์ธ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ๋“ค๊ณผ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ† ํ”ฝ์— ์กด์žฌํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค

 

๋ฐ”๋กœ ํ•™์Šต ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž

 

ํ…Œ์ŠคํŠธ 1. ๋™์ผํ•œ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์— ์†ํ•œ consumer ์˜ ๋ฉ”์‹œ์ง€ ์†Œ๋น„ ํ…Œ์ŠคํŠธ

ํ…Œ์ŠคํŠธ ์„ค๋ช…

  • ์ฃผ์„ 1
    • my-topic ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ด 6๊ฐœ ๋ฐœํ–‰ํ•˜์˜€๋‹ค.
  • ์ฃผ์„ 2 & 3
    • consumer ์ธ์Šคํ„ด์Šค 2๊ฐœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ๋‘˜ ๋‹ค kafka ์˜ consumer config ์ธ groupId ๋กœ ๋™์ผํ•œ fancy-consumer-group ์„ ์ง€์ •ํ–ˆ๋‹ค
    • ๋‘ ์ปจ์Šˆ๋จธ์— my-topic ์„ ๊ตฌ๋…ํ•˜์˜€๋‹ค
  • ์ฃผ์„ 4.
    • ExecutorService ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•œ๋‹ค
  • ์ฃผ์„ 5. & 6.
    • ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์†Œ๋น„ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค
โ˜‘๏ธ expect: ๋™์ผํ•œ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด๋ฏ€๋กœ ์ถœ๋ ฅ๋˜๋Š” ๋ฉ”์‹œ์ง€๋Š” ์ด 6๊ฐœ

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

๋‘๊ฐœ์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ธŒ๋กœ์ปค์— ์—ฐ๊ฒฐ๋˜์—ˆ์„ ์ง€๋ผ๋„ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ์ปจ์Šˆ๋จธ(์ปจ์Šˆ๋จธ ๊ทธ๋ฃน) ์ด ๋ธŒ๋กœ์ปค์— ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‘๊ฐœ์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•œ๋‹ค

 

์ด์ œ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์ž

 

ํ…Œ์ŠคํŠธ 2. ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์— ์†ํ•œ consumer ์˜ ๋ฉ”์‹œ์ง€ ์†Œ๋น„ ํ…Œ์ŠคํŠธ

 

์ด๋ฒˆ ํ…Œ์ŠคํŠธ๋Š” ์•ž์„  ํ…Œ์ŠคํŠธ์—์„œ consumer group ์˜ id value ๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

 

ํ…Œ์ŠคํŠธ ์„ค๋ช…

  • ์ฃผ์„ 1
    • my-topic ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ด 6๊ฐœ ๋ฐœํ–‰ํ•˜์˜€๋‹ค.
  • ์ฃผ์„ 2 & 3
    • consumer ์ธ์Šคํ„ด์Šค 2๊ฐœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ์ฒซ๋ฒˆ์งธ ์ปจ์Šˆ๋จธ๋Š” groupId ๋กœ fancy-consumer-group ์„ ์ง€์ •ํ–ˆ๋‹ค
    • ์ฒซ๋ฒˆ์งธ ์ปจ์Šˆ๋จธ๋Š” groupId ๋กœ not-fancy-consumer-group ์„ ์ง€์ •ํ–ˆ๋‹ค
  • ์ฃผ์„ 5. & 6.
    • ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์†Œ๋น„ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค
โ˜‘๏ธ expect: ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด๋ฏ€๋กœ ์ถœ๋ ฅ๋˜๋Š” ๋ฉ”์‹œ์ง€๋Š” ์ด 12๊ฐœ

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

์นดํ”„์นด ๋ธŒ๋กœ์ปค ์ž…์žฅ์—์„œ ๋…ผ๋ฆฌ์  ์ปจ์Šˆ๋จธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๋ฏ€๋กœ 2๊ฐœ์˜ ์ปจ์Šˆ๋จธ๊ฐ€ 6๊ฐœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜์˜€๋‹ค.

 

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์šฐ๋ฆฌ์˜ ์˜ˆ์ƒ๋Œ€๋กœ ์ด 12๊ฐœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ consumer group ์ด ์™œ ํ•„์š”ํ•œ๋ฐ? -> ์ •๋‹ต์€ ์ฒ˜๋ฆฌ๋Ÿ‰

 

์•ž์„  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” consumer group ์ด๋ผ๋Š” ๋…ผ๋ฆฌ์  ์ปจ์Šˆ๋จธ์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜์˜€๋‹ค.

 

๊ทธ๋Ÿผ ์ด consumer group ์ด ์™œ ํ•„์š”ํ• ๊นŒ?

 

์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„์— ๋ฐฐ์šด partition ์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ถ”๊ฐ€ํ•ด ์„ค๋ช…์„ ์ง„ํ–‰ํ•˜๋ ค ํ•œ๋‹ค. ๋งŒ์•ฝ partition ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์—†์œผ๋ฉด ์•„๋ž˜ ๋‚ด์šฉ์„ ๋”ฐ๋ผ๊ฐ€๊ธฐ ํž˜๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋Œ์•„๊ฐ€์„œ ํ•™์Šตํ•˜๊ธธ ๊ถŒ์žฅํ•œ๋‹ค

 

์ปจ์Šˆ๋จธ๊ฐ€ ํ† ํ”ฝ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•œ๋‹ค๋Š” ๋ง์€ ์ •ํ™•ํžˆ ์ด์•ผ๊ธฐํ•˜๋ฉด ์ปจ์Šˆ๋จธ๊ฐ€ ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

 

์ด ๋ง์„ ๊ทธ๋ฆผ์œผ๋ฃŒ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

ํ•˜๋‚˜์˜ ํ† ํ”ฝ์— 3๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์ด ์กด์žฌํ•˜๋Š” ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋“ค์„ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋Š” ๊ทธ๋ฆผ์ด๋‹ค.

 

 

๋งŒ์•ฝ ์—ฌ๊ธฐ์„œ ํ† ํ”ฝ์— ๋งค์šฐ ๋งŽ์€ ์–‘์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœํ–‰๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

 

์ปจ์Šˆ๋จธ ํ•˜๋‚˜๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์€ ์ •ํ•ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์˜ ์ฒ˜๋ฆฌ์œจ ์€ ๋‚ฎ์•„์ง€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค

 

๋ฐ”๋กœ ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์นดํ”„์นด๋Š” consumer group ์„ ์ด์šฉํ•œ๋‹ค.

 

์ปจ์Šˆ๋จธ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์‹œ์ง€์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” consumer instance ๋ฅผ ๋Š˜๋ ค ์ฒ˜๋ฆฌ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด ์กด์žฌํ•˜๋Š”๋ฐ,

 

consumer group ๊ณผ partition

 

์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ partition ์€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

 

kafka ๋Š” ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๋ณด์žฅ์„ ์œ„ํ•ด ํ•˜๋‚˜์˜ partition ์—๋Š” ํ•˜๋‚˜์˜ consumer ๋งŒ ์ ์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฐ™์€ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์— ์žˆ๋Š” ์ปจ์Šˆ๋จธ ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜๋Š”, ์˜ค๋กœ์ง€ ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€๋งŒ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐ๊ตญ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์˜ ๊ตฌ์„ฑ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค

 

๊ทธ๋Ÿผ ๋ฐ˜๋Œ€๋กœ ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ๋‘๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ• ๊นŒ?

 

๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

๊ฒฐ๋ก ์€ ์ด๋ ‡๋‹ค.

 

  • ํŒŒํ‹ฐ์…˜: ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ์—๋งŒ ํ• ๋‹น์ด ๋˜์–ด์•ผ ํ•จ
  • ์ปจ์Šˆ๋จธ: ํ•˜๋‚˜ ๋˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ์Œ

 

๋‘๋ง ํ•  ๊ฑฐ ์—†์ด ์œ„์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ํ•™์Šต ํ…Œ์ŠคํŠธ๋กœ ์•Œ์•„๋ณด์ž

 

ํ…Œ์ŠคํŠธ 3. [ํŒŒํ‹ฐ์…˜-3] : [1-์ปจ์Šˆ๋จธ] ํ…Œ์ŠคํŠธ

ํ…Œ์ŠคํŠธ ์„ค๋ช…

  • ์ฃผ์„ 1
    • my-topic ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ด 6๊ฐœ ๋ฐœํ–‰ํ•˜์˜€๋‹ค.
    • 3๊ฐœ์˜ ํŒŒํ‹ฐ์…˜ ์ ์ ˆํ•˜๊ฒŒ ๋ถ„๋ฐฐ๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค(ํŒŒํ‹ฐ์…˜ ์„ค์ •์€ kafka test ์„ธํŒ…์‹œ ํ•ด์ฃผ์—ˆ๋‹ค)
  • ์ฃผ์„ 2
    • consumer ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•œ๋‹ค
  • ์ฃผ์„ 3
    • ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์—ด๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•œ๋‹ค
  • ์ฃผ์„ 4
    • ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์†Œ๋น„ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค
โ˜‘๏ธ expect: ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๊ฐ€ 3๊ฐœ์˜ ํŒŒํ‹ฐ์…˜ ๋ฉ”์‹œ์ง€ 6๊ฐœ๋ฅผ ๋ชจ๋‘ ์†Œ๋น„

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

์˜ˆ์ƒํ–ˆ๋‹ค ์‹ถ์ด ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๊ฐ€ 3๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ชจ๋‘ ์†Œ๋น„ํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค

 

ํ…Œ์ŠคํŠธ 4. [ํŒŒํ‹ฐ์…˜-1] : [3-์ปจ์Šˆ๋จธ] ํ…Œ์ŠคํŠธ

ํ…Œ์ŠคํŠธ ์„ค๋ช…

  • ์ฃผ์„ 1
    • my-topic ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ด 6๊ฐœ ๋ฐœํ–‰ํ•˜์˜€๋‹ค.
    • 1๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์—๊ฒŒ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ๋“ค์–ด๊ฐ”์„ ๊ฒƒ์ด๋‹ค
  • ์ฃผ์„ 2
    • consumer ์ธ์Šคํ„ด์Šค 3๊ฐœ ์ƒ์„ฑํ•œ๋‹ค
  • ์ฃผ์„ 3
    • ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์—ด๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•œ๋‹ค
  • ์ฃผ์„ 4
    • ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์†Œ๋น„ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค
โ˜‘๏ธ expect: ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ์—์„œ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

์‹ค์ œ๋กœ 3๊ฐœ์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ ํŒŒํ‹ฐ์…˜์„ ์„ ์ ํ•œ ์ปจ์Šˆ๋จธ๋Š” 1๊ฐœ ๋ฟ์ด๋‹ค.

 

๊ฒฐ๊ตญ ๊ฒฐ๊ณผ๋กœ ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ์—์„œ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค

 

ํŒŒํ‹ฐ์…˜ ์ˆ˜์™€ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์˜ ์ปจ์Šˆ๋จธ ์ˆ˜์˜ ๊ด€๊ณ„

 

์•ž์„  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ํŒŒํ‹ฐ์…˜ ์ˆ˜์™€ ์ปจ์Šˆ๋จธ ์ˆ˜์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

 

  • ํŒŒํ‹ฐ์…˜ ์ˆ˜ > ์ปจ์Šˆ๋จธ ์ˆ˜
    • ํŠน์ • ์ปจ์Šˆ๋จธ๋Š” ํŠน์ • ํŒŒํ‹ฐ์…˜ 2๊ฐœ ์ด์ƒ์„ ์ปจ์Š˜ํ•  ์ˆ˜ ์žˆ์Œ
  • ํŒŒํ‹ฐ์…˜ ์ˆ˜ < ์ปจ์Šˆ๋จธ ์ˆ˜
    • ํŠน์ • ์ปจ์Šˆ๋จธ๋Š” ๋†€๊ณ ์žˆ์Œ (1 ํŒŒํ‹ฐ์…˜:1 ์ปจ์Šˆ๋จธ ์›์น™๋•Œ๋ฌธ์—)
  • ํŒŒํ‹ฐ์…˜ ์ˆ˜ == ์ปจ์Šˆ๋จธ ์ˆ˜
    • ๊ฐ€์žฅ ์ตœ์ ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰

consumer group ๊ณผ rebalancing

 

์•ž์„œ์„œ ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ๋‘๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ–ˆ๋‹ค.

 

์นดํ”„์นด๋Š” ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ์ด์šฉํ•ด์„œ ํƒ„๋ ฅ์„ฑ(resilience) ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด์ž.

 

์˜ˆ๋ฅผ ๋“ค์–ด 3๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์— ๊ฐ๊ฐ ์ปจ์Šˆ๋จธ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ์„œ๋น„์Šค๊ฐ€ ์ œ๊ณต๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ํŠน์ • ํŒŒํ‹ฐ์…˜์— ์—ฐ๊ฒฐ๋œ ์ปจ์Šˆ๋จธ๊ฐ€ ์ œ ๊ธฐ๋Šฅ์„ ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

๊ทธ๋Ÿผ ํŠน์ • ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์†Œ๋น„๋˜์ง€ ๋ชปํ•œ ๋ฉ”์‹œ์ง€๋“ค์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๊ณ , ์ „๋ฐ˜์ ์ธ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋‚ฎ์•„์ง€๊ฒŒ ๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์นดํ”„์นด๋Š” rebalance ๋ผ๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์˜ ๊ฐ€์šฉ ์ปจ์Šˆ๋จธ๋ฅผ ์„ ์ •ํ•˜์—ฌ ํŒŒํ‹ฐ์…˜์˜ ๋ฉ”์‹œ์ง€ ์†Œ์œ ๊ถŒ์„ ์ด์ „ํ•œ๋‹ค.

 

์œ„์˜ ๊ทธ๋ฆผ์€ rebalance ๋ฅผ ํ†ตํ•ด์„œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์ปจ์Šˆ๋จธ์— ๋ฌผ๋ ค์žˆ๋˜ ํŒŒํ‹ฐ์…˜์„ ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ์—๊ฒŒ ์†Œ์œ ๊ถŒ์„ ์ด์ „ํ•œ ๊ฒƒ์„ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์ด๋‹ค.

 

์–ด๋–ป๊ฒŒ ์ปจ์Šˆ๋จธ๋Š” ํŒŒํ‹ฐ์…˜์˜ ์†Œ์œ ๊ถŒ์„ ์œ ์ง€ํ• ๊นŒ?

 

ํŠน์ • ํŒŒํ‹ฐ์…˜์— ์ปจ์Šˆ๋จธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ์‹์€ hart beat check ๋ฅผ ํ†ตํ•ด ์ง„ํ–‰๋œ๋‹ค.

 

์ผ์ • ์ฃผ๊ธฐ๋กœ ์ฒดํฌํ•˜๋Š” ํ•˜ํŠธ๋น„ํŠธ๊ฐ€ ๋ธŒ๋กœ์ปค์— ์ž˜ ๋„์ฐฉํ•œ๋‹ค๋ฉด ์ปจ์Š˜์ด ์ œ๋Œ€๋กœ ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๊ณ„์†ํ•ด์„œ ์†Œ์œ ๊ถŒ์„ ์œ ์ง€์‹œํ‚จ๋‹ค

 

์ด๋Ÿฌํ•œ ํ•˜ํŠธ๋น„ํŠธ๋Š” ์ปจ์Šˆ๋จธ๊ฐ€ poll() ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ์™€ ๊ฐ€์ ธ๊ฐ„ ๋ฉ”์‹œ์ง€์˜ offset ์„ commit ํ•  ๋•Œ ํ•จ๊ป˜ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

๋งŒ์•ฝ ์˜ค๋žœ ์‹œ๊ฐ„๋™์•ˆ ํ•˜ํŠธ๋น„ํŠธ ์ฒดํฌ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฉด ํŒŒํ‹ฐ์…˜์— ์—ฐ๊ฒฐ๋œ ์„ธ์…˜์€ ํƒ€์ž„์•„์›ƒ์ด๋ผ ํŒ๋‹จํ•˜๊ณ  ์ปจ์Šˆ๋จธ๊ฐ€ ๋‹ค์šด๋˜์—ˆ๋‹ค๊ณ  ์ƒ์ •ํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ์‹œ์ž‘๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ์‹œ์ž‘๋˜๋ฉด ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ ๋ฉ”์‹œ์ง€๋Š” ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ๋ชจ๋“  ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ปจ์Šˆ๋จธ๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ฃฝ์—ˆ๋‹ค ์‚ด์•„๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹จ์ˆœ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋Ÿ‰์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๋„˜์–ด ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์— ๋Œ€ํ•œ side-effect ๋„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค

 

ํ•™์Šต ํ…Œ์ŠคํŠธ ์ •๋ฆฌ

  • โœ… ๋™์ผํ•œ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์— ์žˆ๋Š” ์ปจ์Šˆ๋จธ๋ผ๋ฉด ์„œ๋กœ ์ปจ์Šˆ๋จธ
  • โœ… ์„œ๋กœ ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์€ ํ† ํ”ฝ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋Š” offset ์„ ๊ฐ๊ฐ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค
  • โœ… ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์˜ ์ปจ์Šˆ๋จธ๋Š” ํ•˜๋‚˜ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ํŒŒํ‹ฐ์…˜์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ–๋Š”๋‹ค.(๋ฉ”์‹œ์ง€ ์†Œ๋น„์— ๋Œ€ํ•œ)
  • โœ… ๊ฐ™์€ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์—์„œ ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜์— ๋‘๊ฐœ์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ๋™์‹œ์— ์†Œ์œ ๊ถŒ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค
  • โœ… ํŒŒํ‹ฐ์…˜๊ณผ ์ปจ์Šˆ๋จธ์˜ ์ตœ์ ์˜ ์ˆ˜๋Š” ํŒŒํ‹ฐ์…˜ ์ˆ˜ == ์ปจ์Šˆ๋จธ ์ˆ˜
  • โœ… ํŒŒํ‹ฐ์…˜์— ์—ฐ๊ฒฐ๋œ ์ปจ์Šˆ๋จธ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋• rebalance ๋ฅผ ํ†ตํ•ด ๊ฐ€์šฉ ์ปจ์Šˆ๋จธ์—๊ฒŒ ๊ทธ ๊ถŒํ•œ์„ ์œ„์ž„ํ•œ๋‹ค
  • โœ… ์ปจ์Šˆ๋จธ๋Š” ์ž์‹ ์ด ๋ฌธ์ œ ์—†์Œ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด heartbeat check ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค

๋Œ“๊ธ€