kafkaPoint

Kafka ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์ 

Reference

๊ฐ•์˜ : [ํŒจ์ŠคํŠธ์บ ํผ์Šค] The RED : ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ๊ณต์„ ์œ„ํ•œ Java/Spring ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ฐœ๋ฐœ๊ณผ MSA ๊ตฌ์ถ• by ์ดํฌ์ฐฝ

Rebalancing

kafka์™€ ํ†ต์‹ ํ•˜๋Š” consumer group์ค‘ ํŠน์ • ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์šด๋˜์—ˆ์„ ๋•Œ, consumer group ์— consumer๊ฐ€ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ๋˜๋ฉด consumer๊ฐ€ ์†Œ์œ ํ•˜๊ณ ์žˆ๋˜ partition ์„ ์žฌํ• ๋‹น (reassign) ํ•˜๋Š” ์ž‘์—…์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ด๋ฅผ rebalancing ์ด๋ผ๊ณ  ํ•œ๋‹ค

sqs-rebalancing

์œ„ ์ƒํ™ฉ์—์„œ Instance3๊ฐ€ ๋‹ค์šด๋˜์—ˆ์„ ๋•Œ ์ด๋ฅผ ๋น ๋ฅด๊ฒŒ rebalancingํ•ด์•ผ ํ•œ๋‹ค.

sqs-rebalancing2

kafka 1.x ์—์„œ๋Š” rebalancing ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ „์ฒด consumer ๊ฐ€ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ polling ์„ ์ˆœ๊ฐ„ ์ค‘๋‹จํ•œ๋‹ค(Stop the World). kafka ์˜ consumer ๋กœ ์ฐธ์—ฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค kafka ์˜ ๋ชจ๋“  consumer ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹คํ–‰ํžˆ, kafka 2.3 ๋ฒ„์ „ ์ดํ›„๋กœ๋Š” Incremental Cooperative Rebalancing ๋ผ๋Š” ๋””์ž์ธ์ด ์ ์šฉ๋˜์–ด ์ด๋Ÿฐ ์ด์Šˆ๊ฐ€ ํ•ด๊ฒฐ๋œ ์ƒํƒœ์ด๋‹ค. (Stop the Worldํ•˜์ง€ ์•Š๊ณ  ๋™์ž‘ํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋งŒ ์ฐพ์•„ ์žฌํ• ๋‹น)

Design and Implementation of Incremental Cooperative Rebalancing ์ฐธ๊ณ 

์ˆœ์„œ ๋ณด์žฅ

topic์€ ์ˆœ์„œ ๋ณด์žฅ์„ ํ•ด์ฃผ์ง€ ์•Š์ง€๋งŒ, topic๋‚ด์˜ partition์—์„œ๋Š” ์ˆœ์„œ ๋ณด์žฅ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์ค€๋‹ค.

kafka-rebalancing1
  1. ์ฃผ๋ฌธ์™„๋ฃŒ

  2. ๊ฒฐ์ œ์™„๋ฃŒ

  3. ๊ฒฐ์ œ์ทจ์†Œ

์œ„ ์„ธ๊ฐ€์ง€ ์ˆœ์„œ๊ฐ€ ์ง€์ผœ์ ธ์•ผํ•˜๋Š” ๋กœ์ง์—์„œ ์ฃผ๋ฌธ์™„๋ฃŒ->๊ฒฐ์ œ์™„๋ฃŒ->๊ฒฐ์ œ์ทจ์†Œ๊ฐ€ ๊ฐœ๋ณ„ partition์— ๋ถ„๋ฐฐ๋˜๋ฉด ์ˆœ์„œ ๋ณด์žฅ์„ ํ•  ์ˆ˜ ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด partition1์— 1๋ฒˆ์ธ ์ฃผ๋ฌธ์™„๋ฃŒ๊ฐ€ ํ• ๋‹น๋˜๊ณ , partition2์— 2๋ฒˆ์ธ ๊ฒฐ์ œ์™„๋ฃŒ๊ฐ€, partition3์— 3๋ฒˆ์ธ ๊ฒฐ์ œ์ทจ์†Œ๊ฐ€ ํ• ๋‹น๋˜์—ˆ๋‹ค๋ฉด ์–ด๋–ค ๋ฉ”์‹œ์ง€๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋  ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ์—, ํ•œ partition์— ์ฃผ๋ฌธ์™„๋ฃŒ, ๊ฒฐ์ œ์™„๋ฃŒ, ๊ฒฐ์ œ์ทจ์†Œ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋˜์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ kafka์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ sendํ•  ๋•Œ์— key๊ฐ’์„ ๊ฐ™์ด ๋ณด๋‚ด, kafka์—์„œ ์ด key๋ฅผ hashํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • partitionํ•œ ๊ฐœ์—๋งŒ ๋ถ„๋ฐฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค(ํŒŒํ‹ฐ์…”๋‹). ์ฆ‰ ์ˆœ์„œ๊ฐ€ ์ง€์ผœ์ ธ์•ผ ํ•˜๋Š” ๋กœ์ง์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ™์€ key๊ฐ’์„ ๋ถ€์—ฌํ•ด ํ•œ partition๋‚ด์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ์ฃผ๋ฌธ์™„๋ฃŒ, ๊ฒฐ์ œ์™„๋ฃŒ, ๊ฒฐ์ œ์ทจ์†Œ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ํ•œ ๊ฐœ์˜ partition์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก (๊ฐ™์€ ์ฃผ๋ฌธ์— ๋Œ€ํ•ด์„œ) key๊ฐ’์€ ๋ชจ๋‘ ๋˜‘๊ฐ™์ด ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

์ค‘๋ณต ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 

kafka์—์„œ consume ์ดํ›„ offset commit ๋“ฑ์„ ๋ชปํ•˜๋Š” ๋“ฑ์˜ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ด๋ฏธ consumer์—๊ฒŒ ์ „๋‹ฌํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘๋ณต์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๊ฒŒ ๋œ๋‹ค

kafka์—์„œ๋Š” consumer๊ฐ€ ์–ด๋””๊นŒ์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ–ˆ๋Š”์ง€๋ฅผ offset์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ์ˆœ์„œ์˜ ๋ฉ”์‹œ์ง€๋Š” ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š”์ง€๋ฅผ kafka๊ฐ€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ kafka์—์„œ comsumer์—๊ฒŒ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ํ›„ consumer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹  ํ›„ ์ž˜ ์ฒ˜๋ฆฌํ–ˆ์ง€๋งŒ, kafka์™€์˜ ํ†ต์‹ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ, kafka์—๊ฒŒ ์•Œ๋ ค์ค˜์•ผํ•˜๋Š” offset commit์„ ํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ์ค‘๋ณต ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์ฆ‰, consumer์ž…์žฅ์—์„œ๋Š” ์ฒ˜๋ฆฌํ–ˆ๋˜ ๋ฉ”์‹œ์ง€๋ฅผ offset commitํ•˜์ง€ ๋ชปํ•จ์œผ๋กœ์จ kafka์™€์˜ offset์ฐจ์ด๋กœ ์ธํ•ด ์ˆ˜์‹ ํ–ˆ๋˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘๋ณต์œผ๋กœ ๋” ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‘ ๊ฐ€์ง€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  1. throw exception์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ

  2. ์„ฑ๊ณต(http status 200) ์‘๋‹ต

  3. ๋กœ์ง์— ๋ฉฑ๋“ฑ์„ฑ(์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ์šฉํ•˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š” ์„ฑ์งˆ์„ ์˜๋ฏธ) ๊ตฌํ˜„

1๋ฒˆ ๋ฐฉ๋ฒ•์€ ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์„ ๋‘๊ฑฐ๋‚˜ ์ƒˆ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์— unique index ๊ฐ€ ๊ฑธ๋ ค ์žˆ๋Š” msg_id ๋ฅผ insert ํ•˜๋Š” ๋กœ์ง๊ณผ (ex: PROCESSED_MESSAGE ํ…Œ์ด๋ธ”) ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” CUD ๋กœ์ง์„ ๋ฌถ์œผ๋ฉด ๋œ๋‹ค. unique์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต insert๊ฐ€ ๋˜์ง€ ์•Š์•„ exception์ด ๋ฐœ์ƒํ•ด ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

2๋ฒˆ ๋ฐฉ๋ฒ•์€ ์ค‘๋ณต ๋ฉ”์‹œ์ง€๋Š” ์–ด์ฐŒ ๋˜์—ˆ๋“  ์ด์ „์— ํ•œ ๋ฒˆ ์ฒ˜๋ฆฌ๋˜์—ˆ๋˜ ๋กœ์ง์ด๋‹ˆ, exception์ด ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

๋˜๋Š” ์ค‘๋ณต ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” consumer ๋กœ์ง์„ ๋ฉฑ๋“ฑํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์ค‘๋ณต ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ๋˜๋”๋ผ๋„ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

Last updated