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

Consumer - 3

by Soono991 2023. 4. 17.
๐Ÿ’ก ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Consumer -1, Consumer - 2์— ์ด์–ด์„œ Consumer์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

auto.offset.reset

์ปจ์Šˆ๋จธ๊ฐ€ ํ† ํ”ฝ์— ์ฒ˜์Œ ์ ‘์†ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ฒ˜์Œ ์˜คํ”„์…‹(earliest)๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€ ๊ฐ€์žฅ ์ตœ๊ทผ์ธ ๋งˆ์ง€๋ง‰ ์˜คํ”„์…‹(latest) ์ดํ›„๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€๋ฅผ ์„ค์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋ฉฐ, earliest์™€ latest๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://blog.voidmainvoid.net/305
์ถœ์ฒ˜: https://blog.voidmainvoid.net/305

 

  • earliest: ์ฒ˜์Œ ์˜คํ”„์…‹๋ถ€ํ„ฐ ์ฝ์Œ
  • latest: ๋งˆ์ง€๋ง‰ ์˜คํ”„์…‹๋ถ€ํ„ฐ ์ฝ์Œ

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•  ์ ์€ ์ปจ์Šˆ๋จธ๊ฐ€ ํ† ํ”ฝ์— ์ฒ˜์Œ ์ ‘์†ํ•  ๋•Œ __consumer_offsets์— ์žˆ๋Š” ์˜คํ”„์…‹ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— earliest๋กœ ์„ค์ •ํ•œ๋‹ค ํ•ด๋„ ๋ฌด์กฐ๊ฑด 0๋ฒˆ ์˜คํ”„์…‹๋ถ€ํ„ฐ ์ฝ์–ด ๋“ค์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜์–ด๋„ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด ์ฝ์–ด ๋“ค์ธ ์˜คํ”„์…‹ ์ •๋ณด๋Š” 7์ผ ๋™์•ˆ __consumer_offsets์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. (offsets.retention.minutes ์ฐธ๊ณ )

 

ํ•ด๋‹น ํ† ํ”ฝ์ด ์‚ญ์ œ๋˜๊ณ  ์žฌ ์ƒ์„ฑ๋  ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํ† ํ”ฝ์— ๋Œ€ํ•œ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์˜ ์˜คํ”„์…‹ ์ •๋ณด๋Š” 0์œผ๋กœ __consumer_offsets์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

 

 

ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต

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

 

์ปจ์Šˆ๋จธ์˜ ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํฌ๊ฒŒ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต ๋‚ด์šฉ
Range ํ• ๋‹น ์ „๋žต (๊ธฐ๋ณธ ๊ฐ’) ์„œ๋กœ ๋‹ค๋ฅธ 2๊ฐœ ์ด์ƒ์˜ ํ† ํ”ฝ์„ ์ปจ์Šˆ๋จธ๋“ค์ด ๊ตฌ๋…ํ•  ์‹œ ํ† ํ”ฝ๋ณ„๋กœ ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์„ ํŠน์ • ์ปจ์Šˆ๋จธ์—๊ฒŒ ํ• ๋‹นํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ํ† ํ”ฝ๋“ค์—์„œ ๋™์ผํ•œ ํ‚ค ๊ฐ’์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ํŒŒํ‹ฐ์…˜์€ ํŠน์ • ์ปจ์Šˆ๋จธ์— ํ• ๋‹นํ•˜์—ฌ ํ•ด๋‹น ์ปจ์Šˆ๋จธ๊ฐ€ ์—ฌ๋Ÿฌ ํ† ํ”ฝ์˜ ๋™์ผ ํ‚ค๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
Round Robin ํ• ๋‹น ์ „๋žต ํŒŒํ‹ฐ์…˜๋ณ„๋กœ ์ปจ์Šˆ๋จธ๋“ค์ด ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ€ํ•˜๋ฅผ ๋ถ„๋ฐฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ํ† ํ”ฝ๋“ค์˜ ํŒŒํ‹ฐ์…˜๋“ค์„ ์ปจ์Šˆ๋จธ๋“ค์—๊ฒŒ ์ˆœ์ฐจ์ ์ธ Round Robin ๋ฐฉ์‹์œผ๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
Sticky ํ• ๋‹น ์ „๋žต ์ตœ์ดˆ์— ํ• ๋‹น๋œ ํŒŒํ‹ฐ์…˜๊ณผ ์ปจ์Šˆ๋จธ ๋งคํ•‘์„ Rebalance๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด๋„ ๊ฐ€๊ธ‰์  ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ Eager Protocol ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ Rebalance ์‹œ ๋ชจ๋“  ์ปจ์Šˆ๋จธ์˜ ํŒŒํ‹ฐ์…˜ ๋งคํ•‘์ด ํ•ด์ œ ๋œ ํ›„์— ๋‹ค์‹œ ๋งคํ•‘๋˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
Cooperative(ํ˜‘๋ ฅ์ ) Sticky ํ• ๋‹น ์ „๋žต ์ตœ์ดˆ์— ํ• ๋‹น๋œ ํŒŒํ‹ฐ์…˜๊ณผ ์ปจ์Šˆ๋จธ ๋งคํ•‘์„ Rebalance๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด๋„ ๊ฐ€๊ธ‰์  ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•จ๊ณผ ๋™์‹œ์— Cooperative Protocol ๊ธฐ๋ฐ˜์œผ๋กœ Rebalance ์‹œ ๋ชจ๋“  ์ปจ์Šˆ๋จธ์˜ ํŒŒํ‹ฐ์…˜ ๋งคํ•‘์ด ํ•ด์ œ ๋˜์ง€ ์•Š๊ณ  Rebalance์— ์—ฐ๊ด€๋œ ํŒŒํ‹ฐ์…˜๊ณผ ์ปจ์Šˆ๋จธ๋งŒ ์žฌ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

 

๊ฐ ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต์— ๋”ฐ๋ฅธ ์ปจ์Šˆ๋จธ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต ์˜ต์…˜
Range ํ• ๋‹น ์ „๋žต (๊ธฐ๋ณธ ๊ฐ’) partition.assignment.strategy=RangeAssignor
Round Robin ํ• ๋‹น ์ „๋žต partition.assignment.strategy=RoundRobinAssignor
Sticky ํ• ๋‹น ์ „๋žต partition.assignment.strategy=StickyAssignor
Cooperative Sticky ํ• ๋‹น ์ „๋žต partition.assignment.strategy=CooperativeStickyAssignor

 

์ฃผ์˜ํ•  ์ ์€ ์Šคํ‹ฐํ‚ค ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต์ด Rebalance ๋ฐœ์ƒ ์‹œ ๋˜๋„๋ก์ด๋ฉด ๊ธฐ์กด์˜ ์ปจ์Šˆ๋จธ ๋งคํ•‘์„ ์œ ์ง€ํ•˜๋ ค ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ๋Š”๋ฐ,

์Šคํ‹ฐํ‚ค ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€ ๋ชฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ€๋Šฅํ•œ ํ•œ ๊ท ํ˜• ์žกํžŒ ํŒŒํ‹ฐ์…˜ ํ• ๋‹น
  2. Rebalance ๋ฐœ์ƒ ์‹œ ๋˜๋„๋ก ๊ธฐ์กด์˜ ํ• ๋‹น๋œ ํŒŒํ‹ฐ์…˜ ์ •๋ณด๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ

ํ•˜์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ๋ชฉ์ ์ด ๋” ์šฐ์„ ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ‹ฐํ‚ค ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต์ด๋ผ๊ณ  ํ•ด์„œ ๋ฌด์กฐ๊ฑด ๊ธฐ์กด์˜ ํŒŒํ‹ฐ์…˜๊ณผ ์ปจ์Šˆ๋จธ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

 

์•ž์„œ 3๊ฐ€์ง€ ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต(Range, Round Robin, Sticky)์€ ๋ชจ๋‘ Eager Protocol์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Cooperative Sticky ํ• ๋‹น ์ „๋žต์€ Cooperative Protocol์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ Eager ๋ฐฉ์‹๋ณด๋‹ค Rebalancing์ด ๋” ๋น ๋ฅด๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.confluent.io/blog/incremental-cooperative-rebalancing-in-kafka/

 

enable.auto.commit

์นดํ”„์นด์—์„œ๋Š” ์ปจ์Šˆ๋จธ๊ฐ€ ์˜คํ”„์…‹์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจ์Šˆ๋จธ๋Š” ์ ์ ˆํ•œ ์‹œ์ ์— ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜คํ”„์…‹ ์ปค๋ฐ‹ ๊ด€๋ จ ์„ค์ •์—๋Š” enable.auto.commit ์„ค์ •์ด ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค.

์ด ์„ค์ •์ด true์ผ ๊ฒฝ์šฐ ์ปจ์Šˆ๋จธ๊ฐ€ auto.commit.interval.ms ๋งˆ๋‹ค ์˜คํ”„์…‹์„ ์ž๋™์œผ๋กœ ์ปค๋ฐ‹ํ•˜๋ฉฐ auto.commit.interval.ms์˜ ๊ธฐ๋ณธ๊ฐ’์€ 5000ms(5์ดˆ)์ž…๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://d2.naver.com/helloworld/0974525

์ž๋™ ์ปค๋ฐ‹ ๋ฐฉ์‹์€ Rebalance๋‚˜ ๋น„์ •์ƒ์ ์ธ ํด๋ผ์ด์–ธํŠธ ์ข…๋ฃŒ ๋“ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ˆ˜๋™์œผ๋กœ ์ ์ ˆํ•œ ์‹œ์ ์— ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ˆ˜๋™์œผ๋กœ ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ•˜๋ ค๋ฉด KakfaConsumer์˜ commitSync, commitAsync ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ commitSync๋Š” ๋™๊ธฐ, commitAsync๋Š” ๋น„๋™๊ธฐ๋กœ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

 

Consumer - 1

Consumer - 2

 

์ฐธ๊ณ  ์ž๋ฃŒ

'Kafka' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฉ€ํ‹ฐ ๋…ธ๋“œ ์นดํ”„์นด - 1  (0) 2023.05.01
KafkaConsumer  (0) 2023.04.17
Consumer - 2  (0) 2023.04.17
Consumer - 1  (0) 2023.04.16
Producer - 2  (0) 2023.04.09

๋Œ“๊ธ€