05.Partition Assignment Strategy

Partition Assignment Strategy

Startegy

  • Range

  • RoundRobin

  • Sticky

  • CooperativeSticky

  • Custom

Consumer์˜ ์„ค์ • ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘์—์„œ partition.assignment.strategy ๋กœ ํ• ๋‹น ๋ฐฉ์‹ ์กฐ์ •

  • org.apache.kafka.clients.consumer.RangeAssignor Topic๋ณ„๋กœ ์ž‘๋™ํ•˜๋Š” Default Assignor

  • org.apache.kafka.clients.consumer.RoundRobinAssignor Round Robin ๋ฐฉ์‹์œผ๋กœ Consumer์—๊ฒŒ Partition์„ ํ• ๋‹น

  • org.apache.kafka.clients.consumer.StickyAssignor ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๊ธฐ์กด Partition ํ• ๋‹น์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ตœ๋Œ€ ๊ท ํ˜•์„ ์ด๋ฃจ๋Š” ํ• ๋‹น์„ ๋ณด์žฅ

  • org.apache.kafka.clients.consumer.CooperativeStickyAssignor ๋™์ผํ•œ StickyAssignor ๋…ผ๋ฆฌ๋ฅผ ๋”ฐ๋ฅด์ง€๋งŒ ํ˜‘๋ ฅ์ ์ธ Rebalance์„ ํ—ˆ์šฉ

  • org.apache.kafka.clients.consumer.ConsumerPartitionAssignor ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ง€์ • ํ• ๋‹น ์ „๋žต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

Range Assignor

๊ธฐ๋ณธ Assignor

partition.assignment.strategy ํŒŒ๋ผ๋ฏธํ„ฐ์˜ Default Assignor

  • ๋™์ผํ•œ Key๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋“ค์— ๋Œ€ํ•œ Topic๋“ค ๊ฐ„์— โ€œco-partitioningโ€ ํ•˜๊ธฐ ์œ ๋ฆฌ

  • ์˜ˆ) Delivery ID๋ฅผ key๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” delivery_status ๋ฉ”์‹œ์ง€์™€ delivery_location ๋ฉ”์‹œ์ง€

  • Topic์˜ Partition ๊ฐœ์ˆ˜๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ, Co-partitioning ๊ฐ€๋Šฅ

Round Robin Assignor

Range ๋ฐฉ์‹ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฐฐํ•˜์—ฌ ํ• ๋‹น

Round Robin ๋ฐฉ์‹์œผ๋กœ Partition๋“ค๊ณผ Consumer๋“ค์„ ๋ถ„๋ฐฐํ•˜์—ฌ ํ• ๋‹น

  • Reassign(์žฌํ• ๋‹น) ํ›„ Consumer๊ฐ€ ๋™์ผํ•œ Partition์„ ์œ ์ง€ํ•œ๋‹ค๊ณ  ๋ณด์žฅํ•˜์ง€ ์•Š์Œ

  • ์˜ˆ) Consumer 0 ์ด ์ง€๊ธˆ Topic0์˜ Partition0 ์— ํ• ๋‹น๋˜์–ด ์žˆ์ง€๋งŒ, ์žฌํ• ๋‹น์ด ๋ฐœ์ƒํ•˜๋ฉด Topic0์˜ Partition0 ์ด ๋‹ค๋ฅธ Consumer์—๊ฒŒ ํ• ๋‹น๋  ์ˆ˜ ์žˆ์Œ

ํ• ๋‹น ๋ถˆ๊ท ํ˜•์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ

Consumer๊ฐ„ Subscribe ํ•ด์˜ค๋Š” Topic ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ, ํ• ๋‹น ๋ถˆ๊ท ํ˜•์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ

  • 3๊ฐœ์˜ Consumer C0, C1, C2 ์™€ 3๊ฐœ์˜ Topic T0, T1, T2๋ฅผ ๊ฐ€์ •

  • T0์€ Partition 1๊ฐœ, T1๋Š” Partition 2๊ฐœ, T2์€ Partition 3๊ฐœ ๋ฅผ ๊ฐ€์ •

  • C0์€ T0๋งŒ, C1๋Š” T0 ๊ณผ T1๋งŒ, C2์€ T0, T1 ๋ฐ T2๋ฅผ Subscribeํ•œ๋‹ค๊ณ  ๊ฐ€์ •

Sticky Assignor

Range ๋ฐฉ์‹ ๋ณด๋‹ค Rebalancing ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ž„

1. ๊ฐ€๋Šฅํ•œํ•œ ๊ท ํ˜•์ ์œผ๋กœ ํ• ๋‹น์„ ๋ณด์žฅ

  • Consumer๋“ค์—๊ฒŒ ํ• ๋‹น๋œ Topic Partition์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ 1๋งŒํผ ๋‹ค๋ฆ„

  • ํŠน์ • Consumer(์˜ˆ, Consumer A)๊ฐ€ ๋‹ค๋ฅธ Consumer๋“ค(์˜ˆ, Consumer B)์— ๋น„ํ•ด 2๊ฐœ ์ด์ƒ ๋” ์ ์€ Topic Partition์ด ํ• ๋‹น๋œ ๊ฒฝ์šฐ, A์— ํ• ๋‹น๋œ Topic์˜ ๋‚˜๋จธ์ง€ Partition๋“ค์€ B์— ํ• ๋‹น๋  ์ˆ˜ ์—†์Œ

2. ์žฌํ• ๋‹น์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๊ธฐ์กด ํ• ๋‹น์„ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋ณด์กดํ•˜์—ฌ ์œ ์ง€

  • Topic Partition์ด ํ•˜๋‚˜์˜ Consumer์—์„œ ๋‹ค๋ฅธ Consumer๋กœ ์ด๋™ํ•  ๋•Œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ž„

Round Robin ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘

  • 3๊ฐœ์˜ Consumer C0, C1, C2 ์™€ 4๊ฐœ์˜ Topic T0, T1, T2, T3๋ฅผ ๊ฐ€์ •

  • T0, T1, T2, T3๋Š” ๋ชจ๋‘ Partition 2 ๊ฐœ๋ฅผ ๊ฐ€์ •

  • C0, C1, C2 ๋ชจ๋‘ T0, T1, T2, T3๋ฅผ Subscribeํ•œ๋‹ค๊ณ  ๊ฐ€์ •

C1 ์ด ์ œ๊ฑฐ๋˜๊ณ  ์žฌํ• ๋‹น์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •

ํ• ๋‹น ๋ถˆ๊ท ํ˜•์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ž„

Round Robin ๋ฐฉ์‹์—์„œ ์„ค๋ช…ํ–ˆ๋˜ ํ• ๋‹น ๋ถˆ๊ท ํ˜•์ด ๋ฐœ์ƒํ–ˆ๋˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์•„๋ž˜์™€ ๊ฐ™์Œ

  • 3๊ฐœ์˜ Consumer C0, C1, C2 ์™€ 3๊ฐœ์˜ Topic T0, T1, T2๋ฅผ ๊ฐ€์ •

  • T0์€ Partition 1๊ฐœ, T1๋Š” Partition 2๊ฐœ, T2์€ Partition 3๊ฐœ ๋ฅผ ๊ฐ€์ •

  • C0์€ T0๋งŒ, C1๋Š” T0 ๊ณผ T1๋งŒ, C2์€ T0, T1 ๋ฐ T2๋ฅผ Subscribeํ•œ๋‹ค๊ณ  ๊ฐ€์ •

Sticky : ํŠน์ • Consumer(์˜ˆ, Consumer A)๊ฐ€ ๋‹ค๋ฅธ Consumer๋“ค(์˜ˆ, Consumer B)์— ๋น„ํ•ด 2๊ฐœ ์ด์ƒ ๋” ์ ์€ Topic Partition์ด ํ• ๋‹น๋œ ๊ฒฝ์šฐ, A์— ํ• ๋‹น๋œ Topic์˜ ๋‚˜๋จธ์ง€ Partition๋“ค์€ B์— ํ• ๋‹น๋  ์ˆ˜ ์—†์Œ

Consumer 0 ์ด ์ œ๊ฑฐ๋˜๊ณ  ์žฌํ• ๋‹น์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •

Last updated