๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“จ Apache Kafka

[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 4-4์žฅ ์Šคํ”„๋ง ์นดํ”„์นด

by GroovyArea 2023. 6. 6.

์Šคํ”„๋ง ์นดํ”„์นด

  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์นดํ”„์นด๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ์—์„œ ํ™œ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŒจํ„ด์„ ๋ฏธ๋ฆฌ ์ œ๊ณตํ•จ.

 

์Šคํ”„๋ง ์นดํ”„์นด ํ”„๋กœ๋“€์„œ

  • ์Šคํ”„๋ง ์นดํ”„์นด ํ”„๋กœ๋“€์„œ๋Š” ์นดํ”„์นด ํ…œํ”Œ๋ฆฟ (Kafka Template) ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ
  • ์นดํ”„์นด ํ…œํ”Œ๋ฆฟ์€ ํ”„๋กœ๋“€์„œ ํŒฉํ† ๋ฆฌ (Producer Factory) ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ

๋ฐฉ๋ฒ•

  • ์Šคํ”„๋ง ์นดํ”„์นด์˜ ๊ธฐ๋ณธ ์ œ๊ณต ํ…œํ”Œ๋ฆฟ
    • application.yml ํŒŒ์ผ์— ์˜ต์…˜์„ ์ง€์ •ํ•˜๊ณ  ์‚ฌ์šฉ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์นดํ”„์นด ํ…œํ”Œ๋ฆฟ์„ ํ”„๋กœ๋“€์„œ ํŒฉํ† ๋ฆฌ๋กœ ์ƒ์„ฑ
    • ํ”„๋กœ๋“€์„œ ํŒฉํ† ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ์นดํ”„์นด ํ…œํ”Œ๋ฆฟ์„ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก ํ›„ ์‚ฌ์šฉ
    • ํ”„๋กœ๋“€์„œ์— ํ•„์š”ํ•œ ๊ฐ์ข… ์˜ต์…˜์„ ์„ ์–ธ ํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ์Šคํ”„๋ง ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์— ๋‹ค์–‘ํ•œ ํ”„๋กœ๋“€์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์‚ฌ์šฉ
      • A ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ „์†กํ•˜๋Š” ์นดํ”„์นด ํ”„๋กœ๋“€์„œ
      • B ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ „์†กํ•˜๋Š” ์นดํ”„์นด ํ”„๋กœ๋“€์„œ
      • ์ด ๋‘๊ฐœ์˜ ํ”„๋กœ๋“€์„œ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉ์‹œ ์ž…๋ง›์— ๋งž๊ฒŒ Bean ๋“ฑ๋ก ํ›„ ์‚ฌ์šฉํ•ด๋ผ

 

์Šคํ”„๋ง ์นดํ”„์นด ์ปจ์Šˆ๋จธ

  • ์Šคํ”„๋ง ์นดํ”„์นด ์ปจ์Šˆ๋จธ๋Š” ๊ธฐ์กด ์ปจ์Šˆ๋จธ๋ฅผ ํฌ๊ฒŒ 2๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์ปค๋ฐ‹์„ 7๊ฐœ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.

ํƒ€์ž…

  • ๋ ˆ์ฝ”๋“œ ๋ฆฌ์Šค๋„ˆ (Message Listener)
    • ๋‹จ 1๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์ฒ˜๋ฆฌ
  • ๋ฐฐ์น˜ ๋ฆฌ์Šคํ„ฐ (Batch Message Listener)
    • ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ ๋ ˆ์ฝ”๋“œ๋“ค ์ฒ˜๋ฆฌ

๋ฐฉ๋ฒ•

  • ๊ธฐ์กด ์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์ปจ์Šˆ๋จธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กœ์šด ๋ถ€๋ถ„ -> ์ปค๋ฐ‹ ๊ตฌํ˜„
  • ์นดํ”„์นด ์ปจ์Šˆ๋จธ์—์„œ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ๋Š” ์˜คํ† , ๋™๊ธฐ, ๋น„๋™๊ธฐ ์ปค๋ฐ‹ ๋‚˜๋‰จ
    • ์‹ค์ œ ์šด์˜ํ•œ๊ฒฝ์—์„œ๋Š” ์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•จ.
  • ์˜ˆ์‹œ
    • ํŠน์ • ํƒ€์ด๋ฐ๋งˆ๋‹ค ์ปค๋ฐ‹
    • ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์ปค๋ฐ‹
    • ์ด๋Ÿฌํ•œ ๊ทœ์น™ ์ ์šฉ ์‹œ ๋กœ์ง์„ ๊ณ„์†์ ์œผ๋กœ ์ถ”๊ฐ€ ์ž‘์„ฑํ•ด์•ผํ•จ.
  • ์Šคํ”„๋ง ์นดํ”„์นด๋Š” ํ†ต์šฉ๋˜๋Š” ์ปค๋ฐ‹์˜ ์ข…๋ฅ˜๋ฅผ 7๊ฐ€์ง€๋กœ ์„ธ๋ถ„ํ™”
    • RECORD, BATCH, TIME, COUNT, COUNT_TIME, MANUAL, MANUAL_IMMEDIATE)
    • ์Šคํ”„๋ง์ด ๋ฏธ๋ฆฌ ๋กœ์ง ์ƒ์„ฑํ•ด ๋†“์Œ..
  • ์Šคํ”„๋ง ์นดํ”„์นด์—์„œ ์ปค๋ฐ‹์€ ์ปค๋ฐ‹์ด ์•„๋‹ˆ๋ผ AckMode
    • ๊ธฐ๋ณธ ๊ฐ’์€ BATCH
    • ์ปจ์Šˆ๋จธ์˜ enable.auto.commit = false

๋ฆฌ์Šค๋„ˆ ์ƒ์„ฑ ๋ฐฉ์‹

  • ๊ธฐ๋ณธ ๋ฆฌ์Šค๋„ˆ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ
  • ์ปจํ…Œ์ด๋„ˆ ํŒฉํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ Bean ๋“ฑ๋ก ํ›„ ์‚ฌ์šฉ
๋ฐ˜์‘ํ˜•