[MSA] kafka - consumer

Updated:

Categories:

Tags: , ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

์ธํ”„๋Ÿฐ Dowon Lee๋‹˜์˜ Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๐Ÿ˜Š
Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) ๊ฐ•์˜ ๋“ค์œผ๋Ÿฌ ๊ฐ€๊ธฐ๐Ÿ‘ฉโ€๐Ÿซ
โœ… ์ถ”๊ฐ€๋กœ kafka ์— ๋Œ€ํ•ด ์ž˜ ์ •๋ฆฌ๋œ ๋ธ”๋กœ๊ทธ๊ฐ€ ์žˆ์–ด ์ฐธ๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค.ย ยป ์–ธ์ œ๋‚˜๊น€๊น€

์นดํ”„์นด ์ปจ์Šˆ๋จธ(Kafka Consumer)

  • ์นดํ”„์นด ๋ฉ”์‹œ์ง€ ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹น
  • ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ธŒ๋กœ์ปค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด, ์ปจ์Šˆ๋จธ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

1๏ธโƒฃ ์ปจ์Šˆ๋จธ ๊ตฌ์กฐ

์ปจ์Šˆ๋จธ ๊ทธ๋ฃน(Consumer Group)

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

์ปจ์Šˆ๋จธ์™€ ํŒŒํ‹ฐ์…˜์˜ ๋งคํ•‘

  • N:1 ๊ด€๊ณ„: ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜์€ ํ•œ ์ปจ์Šˆ๋จธ์—๊ฒŒ๋งŒ ํ• ๋‹น๋œ๋‹ค.
  • ํ™•์žฅ์„ฑ: ์ปจ์Šˆ๋จธ ์ˆ˜๋ฅผ ๋Š˜๋ ค ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ํŒŒํ‹ฐ์…˜ ์ˆ˜ ์ด์ƒ์˜ ํšจ๊ณผ๋Š” ์—†๋‹ค.

2๏ธโƒฃ ์˜คํ”„์…‹(Offset)๊ณผ ์ปค๋ฐ‹(Commit)

์˜คํ”„์…‹(Offset)

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

์˜คํ”„์…‹ ์ปค๋ฐ‹(Commit)

  • ์ปจ์Šˆ๋จธ๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๋งˆ์ง€๋ง‰ ์˜คํ”„์…‹์„ ๋ธŒ๋กœ์ปค์— ์ €์žฅํ•˜์—ฌ, ์žฌ์‹œ์ž‘ ์‹œ ํ•ด๋‹น ์œ„์น˜๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์ €์žฅ ์œ„์น˜: ์นดํ”„์นด ๋‚ด๋ถ€ ํ† ํ”ฝ์ธ __consumer_offsets์— ์ €์žฅ๋œ๋‹ค.
  • ์ปค๋ฐ‹ ๋ฐฉ์‹
    • ์ž๋™ ์ปค๋ฐ‹(Auto Commit):
      • ์„ค์ •: enable.auto.commit=true
      • ์ปจ์Šˆ๋จธ๊ฐ€ ์ผ์ • ์ฃผ๊ธฐ(auto.commit.interval.ms)๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ•œ๋‹ค.
      • ์žฅ์ : ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋ฉฐ, ๋ณ„๋„์˜ ์ฝ”๋“œ ์ž‘์„ฑ์ด ํ•„์š” ์—†๋‹ค.
      • ๋‹จ์ : ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ค‘๋‹จ ์‹œ ๋ฐ์ดํ„ฐ ์ค‘๋ณต ๋˜๋Š” ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
    • ์ˆ˜๋™ ์ปค๋ฐ‹(Manual Commit):
      • ์„ค์ •: enable.auto.commit=false
      • ๋ฐฉ๋ฒ•
        • ๋™๊ธฐ ์ปค๋ฐ‹(commitSync): ์ปค๋ฐ‹ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ
        • ๋น„๋™๊ธฐ ์ปค๋ฐ‹(commitAsync): ์ปค๋ฐ‹ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๋ฐ”๋กœ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      • ์žฅ์ : ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์™„๋ฃŒ ํ›„ ์ •ํ™•ํ•œ ์‹œ์ ์— ์ปค๋ฐ‹ํ•  ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด๋‚˜ ์œ ์‹ค์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.
      • ๋‹จ์ : ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๋ฉฐ, ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ค‘๋ณต๊ณผ ์œ ์‹ค

  • ์ค‘๋ณต ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ: ์ปจ์Šˆ๋จธ ์žฅ์• ๋‚˜ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ์‹œ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹๋œ ์˜คํ”„์…‹ ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜์–ด ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ์‹ค ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ: ์ž๋™ ์ปค๋ฐ‹ ์‚ฌ์šฉ ์‹œ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ „์— ์˜คํ”„์…‹์ด ์ปค๋ฐ‹๋˜๋ฉด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ:
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์ค‘๋ณต ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ตฌํ˜„
    • ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ ค

3๏ธโƒฃ ํด๋ง(Polling) ๋ฉ”์ปค๋‹ˆ์ฆ˜

Poll ๋ฉ”์„œ๋“œ

  • ๋™์ž‘ ๋ฐฉ์‹: ์ปจ์Šˆ๋จธ๋Š” poll() ๋ฉ”์„œ๋“œ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ๋™์ž‘
    • ์ปจ์Šˆ๋จธ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Fetcher ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์™€ ๋‚ด๋ถ€ ํ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • poll() ํ˜ธ์ถœ ์‹œ ๋‚ด๋ถ€ ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ํ•˜ํŠธ๋น„ํŠธ(Heartbeat)

  • ์—ญํ• : ์ปจ์Šˆ๋จธ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ธŒ๋กœ์ปค(์ฝ”๋””๋„ค์ดํ„ฐ)์—๊ฒŒ ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ์ „์†กํ•˜์—ฌ ์ž์‹ ์˜ ์ƒํƒœ๋ฅผ ์•Œ๋ฆฐ๋‹ค.
  • ์„ค์ • ์˜ต์…˜
    • heartbeat.interval.ms: ํ•˜ํŠธ๋น„ํŠธ ์ „์†ก ์ฃผ๊ธฐ(๊ธฐ๋ณธ๊ฐ’: 3์ดˆ)
    • session.timeout.ms: ์ปจ์Šˆ๋จธ ์„ธ์…˜ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„(๊ธฐ๋ณธ๊ฐ’: 10์ดˆ)
      • ์ด ์‹œ๊ฐ„ ๋‚ด์— ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ๋ธŒ๋กœ์ปค๋Š” ์ปจ์Šˆ๋จธ๊ฐ€ ๋น„์ •์ƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ํด๋ง ์ฃผ๊ธฐ์™€ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ

  • ํด๋ง ์ง€์—ฐ ์‹œ ๋ฌธ์ œ์ 
    • max.poll.interval.ms ์„ค์ • ์‹œ๊ฐ„(๊ธฐ๋ณธ๊ฐ’: 5๋ถ„) ๋‚ด์— poll()์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ปจ์Šˆ๋จธ๋Š” ๋น„์ •์ƒ์œผ๋กœ ํŒ๋‹จ๋œ๋‹ค.
    • ์ด ๊ฒฝ์šฐ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ์ „์ฒด์˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ฐ€ ์ผ์‹œ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
    • max.poll.records๋ฅผ ์กฐ์ •ํ•˜์—ฌ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.
    • ๋ ˆ์ฝ”๋“œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜์—ฌ poll() ํ˜ธ์ถœ ๊ฐ„๊ฒฉ์„ ๋‹จ์ถ•ํ•œ๋‹ค.
    • ์Šค๋ ˆ๋“œ ๋ถ„๋ฆฌ ๋“ฑ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ์™€ ํด๋ง์„ ๋ณ‘๋ ฌํ™”ํ•œ๋‹ค.

4๏ธโƒฃ ์ปจ์Šˆ๋จธ ์ฃผ์š” ์˜ต์…˜

ํ•„์ˆ˜ ์˜ต์…˜

  1. bootstrap.servers
    • ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ธŒ๋กœ์ปค ์ •๋ณด๋ฅผ ์ง€์ •
  2. key.deserializer
    • ๋ฉ”์‹œ์ง€ ํ‚ค๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•˜๋Š” ํด๋ž˜์Šค
  3. value.deserializer
    • ๋ฉ”์‹œ์ง€ ๊ฐ’์„ ์—ญ์ง๋ ฌํ™”ํ•˜๋Š” ํด๋ž˜์Šค
  4. group.id
    • ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์˜ ์•„์ด๋””๋ฅผ ์ง€์ •

์„ ํƒ ์˜ต์…˜

  1. auto.offset.reset
    • ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์˜ ์˜คํ”„์…‹์ด ์—†์„ ๋•Œ ์–ด๋””์„œ๋ถ€ํ„ฐ ์ฝ์„์ง€ ์ง€์ •ํ•œ๋‹ค.
    • ์˜ต์…˜ ๊ฐ’:
      • latest(๊ธฐ๋ณธ๊ฐ’): ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์˜คํ”„์…‹๋ถ€ํ„ฐ ์ฝ๋Š”๋‹ค.
      • earliest: ๊ฐ€์žฅ ์ฒ˜์Œ ์˜คํ”„์…‹๋ถ€ํ„ฐ ์ฝ๋Š”๋‹ค.
      • none: ์˜คํ”„์…‹์ด ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค
  2. enable.auto.commit
    • ์ž๋™ ์ปค๋ฐ‹ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •
    • ๊ธฐ๋ณธ๊ฐ’์€ true
  3. auto.commit.interval.ms
    • ์ž๋™ ์ปค๋ฐ‹์ผ ๊ฒฝ์šฐ ์˜คํ”„์…‹ ์ปค๋ฐ‹ ์ฃผ๊ธฐ๋ฅผ ์ง€์ •
    • ๊ธฐ๋ณธ๊ฐ’์€ 5,000ms(5์ดˆ)
  4. fetch.min.bytes
    • ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ตœ์†Œ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ
    • ๊ธฐ๋ณธ๊ฐ’์€ 1๋ฐ”์ดํŠธ
  5. fetch.max.bytes
    • ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ
    • ๊ธฐ๋ณธ๊ฐ’์€ 50MB
  6. max.poll.records
    • ํ•œ ๋ฒˆ์˜ poll() ํ˜ธ์ถœ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ ˆ์ฝ”๋“œ ์ˆ˜
    • ๊ธฐ๋ณธ๊ฐ’์€ 500์ž…
  7. max.poll.interval.ms
    • poll() ํ˜ธ์ถœ ๊ฐ„ ์ตœ๋Œ€ ์ง€์—ฐ ์‹œ๊ฐ„
    • ๊ธฐ๋ณธ๊ฐ’์€ 300,000ms(5๋ถ„)
  8. session.timeout.ms
    • ์ปจ์Šˆ๋จธ ์„ธ์…˜ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„
    • ๊ธฐ๋ณธ๊ฐ’์€ 10,000ms(10์ดˆ)
  9. heartbeat.interval.ms
    • ํ•˜ํŠธ๋น„ํŠธ ์ „์†ก ์ฃผ๊ธฐ
    • ๊ธฐ๋ณธ๊ฐ’์€ 3,000ms(3์ดˆ)
  10. isolation.level
    • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜ต์…˜
    • read_uncommitted(๊ธฐ๋ณธ๊ฐ’), read_committed ์ค‘ ์„ ํƒ

5๏ธโƒฃํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต๊ณผ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ

ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต(Partition Assignment Strategy)

  • ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์—์„œ ํŒŒํ‹ฐ์…˜์„ ์ปจ์Šˆ๋จธ์—๊ฒŒ ์–ด๋–ป๊ฒŒ ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •
  • ์˜ต์…˜:
    • RangeAssignor(๊ธฐ๋ณธ๊ฐ’)
      • ํ† ํ”ฝ๋ณ„๋กœ ํŒŒํ‹ฐ์…˜์„ ๋ฒ”์œ„ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ปจ์Šˆ๋จธ์—๊ฒŒ ํ• ๋‹น
    • RoundRobinAssignor
      • ๋ชจ๋“  ํŒŒํ‹ฐ์…˜์„ ์ปจ์Šˆ๋จธ๋“ค์—๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ํ• ๋‹น
    • StickyAssignor:
      • ์ด์ „ ํ• ๋‹น ์ƒํƒœ๋ฅผ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜๋ฉฐ ํŒŒํ‹ฐ์…˜์„ ํ• ๋‹น
    • CooperativeStickyAssignor
      • ํ˜‘๋ ฅ์ ์ธ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ์ตœ์†Œํ•œ์˜ ์ด๋™์œผ๋กœ ํŒŒํ‹ฐ์…˜์„ ์žฌ๋ถ„๋ฐฐ

๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ(Rebalancing)

  • ๋ฐœ์ƒ ์กฐ๊ฑด:
    • ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด ์ปจ์Šˆ๋จธ์˜ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ
    • ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜ ์ˆ˜ ๋ณ€๊ฒฝ
  • ๋™์ž‘ ๊ณผ์ •:
    1. ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด ์ปจ์Šˆ๋จธ๋“ค์€ poll() ํ˜ธ์ถœ ์‹œ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ํ•„์š” ์—ฌ๋ถ€๋ฅผ ํ™•์ธ
    2. ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ํ•„์š”ํ•˜๋ฉด ์ปจ์Šˆ๋จธ๋“ค์€ ์ฝ”๋””๋„ค์ดํ„ฐ์—๊ฒŒ ์กฐ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค
    3. ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” ์ปจ์Šˆ๋จธ๋“ค์˜ ์กฐ์ธ ์š”์ฒญ์„ ๋ฐ›์€ ํ›„ ๊ทธ๋ฃน ๋ฆฌ๋”๋ฅผ ์„ ์ถœ
    4. ๊ทธ๋ฃน ๋ฆฌ๋”๋Š” ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต์— ๋”ฐ๋ผ ํŒŒํ‹ฐ์…˜์„ ์ปจ์Šˆ๋จธ๋“ค์—๊ฒŒ ๋ถ„๋ฐฐํ•˜๊ณ  ์ฝ”๋””๋„ค์ดํ„ฐ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค
    5. ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” ๊ฐ ์ปจ์Šˆ๋จธ์—๊ฒŒ ์ƒˆ๋กœ์šด ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ •๋ณด๋ฅผ ์ „์†ก
  • ์ฃผ์˜์‚ฌํ•ญ:
    • ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ๋™์•ˆ ์ปจ์Šˆ๋จธ๋“ค์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค
    • ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ง€์—ฐ(Lag)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ์ตœ์ ํ™” ๋ฐฉ์•ˆ

  1. ํด๋ง ์ฃผ๊ธฐ ๋‹จ์ถ•
    • max.poll.records๋ฅผ ์ค„์—ฌ poll() ํ˜ธ์ถœ ๋นˆ๋„๋ฅผ ๋†’์ธ๋‹ค.
  2. ์Šค๋ ˆ๋“œ ๋ถ„๋ฆฌ
    • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ poll() ํ˜ธ์ถœ ์ง€์—ฐ์„ ๋ฐฉ์ง€ํ•œ๋‹ค
    • ๋‹จ, ํŒŒํ‹ฐ์…˜๋ณ„ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค
  3. Cooperative Rebalancing ์‚ฌ์šฉ
    • partition.assignment.strategy๋ฅผ CooperativeStickyAssignor๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์˜ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค

์ปจ์Šˆ๋จธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ

  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ
    • poll() ๋ฉ”์„œ๋“œ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ๊ฐ™์€ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ํด๋ง ์ฃผ๊ธฐ๊ฐ€ ๊ธธ์–ด์ ธ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์— ์˜ํ–ฅ์ด ์žˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ
    • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ ํ’€์—์„œ ์ˆ˜ํ–‰
    • ํด๋ง ์ฃผ๊ธฐ๋ฅผ ์งง๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŒŒํ‹ฐ์…˜๋ณ„ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์Šค๋ ˆ๋“œ ํ’€์˜ ํฌ๊ธฐ์™€ ๋ฐฑํ”„๋ ˆ์…”(Backpressure) ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

  • ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ
    • ํŒŒํ‹ฐ์…˜ ๋‚ด ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ ค๋ฉด ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ˆœ์„œ ๋ณด์žฅ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ค‘๋ณต ์ฒ˜๋ฆฌ ๋ฐฉ์ง€
    • ์ปจ์Šˆ๋จธ ์žฅ์•  ์‹œ ์ค‘๋ณต ์ฒ˜๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฉฑ๋“ฑ์„ฑ์„ ๊ณ ๋ คํ•œ ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋ฐฑํ”„๋ ˆ์…” ๊ด€๋ฆฌ
    • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์†๋„์™€ ์ˆ˜์‹  ์†๋„์˜ ๊ท ํ˜•์„ ๋งž์ถฐ ๋ฉ”๋ชจ๋ฆฌ ์ด์Šˆ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.





MSA ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment