๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

BackEnd๐ŸŒฑ/Kafka4

Spring Boot์—์„œ ์—ฌ๋Ÿฌ Kafka ํด๋Ÿฌ์Šคํ„ฐ ์‚ฌ์šฉํ•˜๊ธฐ ๊ฐœ์š”ํ”„๋กœ์ ํŠธ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด์ง€๋งŒ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์˜ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ๋™์‹œ์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.๋‚˜๋Š” ์ด๋ฒˆ์— ์ž‘์—…ํ•˜๋ฉด์„œ ๊ธฐ์กด์˜ ์—ฐ๊ฒฐ๋œ Kafka ํด๋Ÿฌ์Šคํ„ฐ ๋ง๊ณ ๋„ ๋˜ ํ•˜๋‚˜์˜ ์ƒˆ๋กœ์šด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์–ป์—ˆ๋˜ ์ง€์‹์„ ๊ณต์œ ํ•˜๊ณ ์ž ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.  ์ปจ์Šˆ๋จธ ์„ค์ •Spring Boot๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ConcurrentKafkaListenerContainerFactory๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ Kafka ๋ฆฌ์Šค๋„ˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ConcurrentKafkaListenerContainerFactory ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ์— ๋งž๋Š” C.. 2024. 8. 17.
[Kafka] ์ปจ์Šˆ๋จธ ์˜คํ”„์…‹ ์ˆ˜๋™์œผ๋กœ ์ปค๋ฐ‹ํ•˜๊ธฐ ๊ฐœ์š”๋ฉ”์‹œ์ง€ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฌธ์ œ์—†์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋งŒ commit์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก, ์ปจ์Šˆ๋จธ์˜ offset commit์„ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๋Ÿฌ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ auto.offset.commit๋งŒ false๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” ์ž๋™ ์ปค๋ฐ‹์˜ ๋™์ž‘ ๊ณผ์ •๊ณผ ์ฃผ์˜์ , ๊ทธ๋ฆฌ๊ณ  ์ปค๋ฐ‹์„ ์ˆ˜๋™์œผ๋กœ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ auto.offset.commit ์„ค์ •๊ณผ ack-mode ์„ค์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  auto.offset.commitKafka์˜ ์ปจ์Šˆ๋จธ๋Š” ์ฝ์€ ๋ฉ”์‹œ์ง€์˜ ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด offset์„ commit ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด offset์€ Kafka์˜ ๋‚ด๋ถ€ ํ† ํ”ฝ์ธ __consumer_offsets์— ์ €์žฅ๋˜๋ฉฐ,.. 2024. 3. 6.
[Kafka] ํ”„๋กœ๋“€์„œ ๋ฉฑ๋“ฑ์„ฑ ๋ณด์žฅํ•˜๊ธฐ ๊ฐœ์š”๋ฉฑ๋“ฑ์„ฑ์€ ๋™์ผํ•œ ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋”๋ผ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ํŠน์„ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉฑ๋“ฑ์„ฑ์„ ์ง€๋‹Œ ํ”„๋กœ๋“€์„œ๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ „์†กํ•˜๋”๋ผ๋„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ €์žฅ๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ๋“€์„œ์— ์–ด๋–ป๊ฒŒ ๋ฉฑ๋“ฑ์„ฑ์„ ์ ์šฉํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ์ €์žฅ ์—†์ด ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ๋งŒ ์ €์žฅ๋˜๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํ”„๋กœ๋“€์„œ์— ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•˜๋„๋ก ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.  ๋ฉ”์‹œ์ง€ ์ „์†ก ๋ฐฉ์‹Producer์™€ Broker์˜ ์„ค์ • ๋ฐ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ Kafka์—์„œ๋Š” ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ณด์žฅ ์ˆ˜์ค€์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ ํ•œ ๋ฒˆ (At most once): ๋ฉ”์‹œ์ง€๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ์ „์†ก๋˜๋ฉฐ, ์žฌ์ „์†ก์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜.. 2024. 2. 1.
[Kafka] ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ์ข…๋ฅ˜์™€ ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต ๊ฐœ์š”์นดํ”„์นด ์ปจ์Šˆ๋จธ๋Š” ํ† ํ”ฝ์˜ ๊ฐ ํŒŒํ‹ฐ์…˜์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํŠน์ • ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ฒŒ ๋˜๋ฉด ๊ทธ ์ปจ์Šˆ๋จธ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋˜ ํŒŒํ‹ฐ์…˜์˜ ์†Œ์œ ๊ถŒ์„ ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ๋กœ ๋„˜๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ •์„ '๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ'์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์ฃผ๋กœ ์•„๋ž˜ ๋„ค ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์— ์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๊ธฐ์กด ์ปจ์Šˆ๋จธ๊ฐ€ ๊ทธ๋ฃน์—์„œ ๋‚˜๊ฐˆ ๋•Œ๊ตฌ๋…ํ•˜๋Š” ํ† ํ”ฝ์— ์ƒˆ๋กœ์šด ํŒŒํ‹ฐ์…˜์ด ์ƒ๊ธธ ๋•Œ์ปจ์Šˆ๋จธ๊ฐ€ ๊ตฌ๋…ํ•˜๋Š” ํ† ํ”ฝ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ๊ฐ€์žฅ ๋งŽ์ด ์ผ์–ด๋‚˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์‹œ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ํ›„ ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋ฉด์„œ, ๊ธฐ์กด ์ปจ์Šˆ๋จธ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ตœ์†Œ ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ๋™๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.. 2024. 1. 7.