Partition Assignors of Consumer Group
ํ์ฌ์์ Confluent๋ฅผ ํตํด Kafka ํด๋ฌ์คํฐ๋ฅผ ์ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ด ์นดํ์นด์ ๋ํด์ ์ข๋ ์์ธํ ์๊ณ , ์ ๋ฌธ์ฑ์ ๊ฐ์ถ๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ค์ด์ 2025๋ ์ฒซ ๋ชฉํ๋ก Confluent์ Kafka ์๊ฒฉ์ฆ์ธ Confluent Certified Developer for Apache Kafkaยฎ ์๊ฒฉ์ฆ์ ์ค๋นํ๊ณ ์์ต๋๋ค โ๏ธ
๋ค์ด๊ฐ๋ฉฐ
์ปจ์๋จธ ๊ทธ๋ฃน์ ์ฌ๋ฌ ์ปจ์๋จธ๊ฐ ๋ชจ์ฌ์ ์นดํ์นด ํ ํฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ตฌ์ฑ๋ ์ปดํฌ๋ํธ ์ ๋๋ค. โ์ปจ์๋จธ๊ฐ N๊ฐ๋๊น, ์ฒ๋ฆฌ๋๋ N๊ฐ? ํํโ์ฒ๋ผ ๋จ์ํ๊ฒ ์๊ฐํ ์ ์๊ฒ ์ง๋ง, ๋ณธ์ง์ ์ปจ์๋จธ ๊ทธ๋ฃน์ด ํ๋์ โ์์ ํด๋ฌ์คํฐโ๊ฐ ๋์ด ์นดํ์นด ๋ธ๋ก์ปค์ ํต์ ํ๊ฒ ๋ฉ๋๋ค. ํด๋ฌ์คํฐ ์ฒ๋ผ ๋์ํ๋ ์ปดํฌ๋ํธ์ด๋ ์ด๋ค์ ์ ์ดํ๊ณ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค ํ๋ ์ธ ์ญํ ์ด ํ์ ํฉ๋๋ค! ์ง๋๋ฒ ํฌ์คํธ์์ ๊ทธ ์ญํ ์ ํด์ฃผ๋ ๊ฒ์ด ์ฝ๋๋ค์ดํฐ(Coordinator)์ ๋ํด ์ดํด๋ณด์์ต๋๋ค: โโ, ์ด๋ฒ ํฌ์คํธ์์๋ ๊ฐ ์ปจ์๋จธ์ ํํฐ์ ์ ํ ๋นํ๋ โPartition Assignorโ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Range Assignor
Confluent: Consumer Group Protocol
์ปจ์๋จธ ๊ทธ๋ฃน์์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ํ ๋น ๋ฐฉ์ ์ ๋๋ค.
๊ฐ ํ ํฝ ๋ณ ํํฐ์ ์ ์ ๋ ฌํ ํ, ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ ๋ ฌ๋ ์ปจ์๋จธ ID ์์๋๋ก ํ ๋นํ๋ ์ ์ฑ ์ ๋๋ค. ์ด ๊ณผ์ ์ด ํ ํฝ ๋ณ๋ก ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ปจ์๋จธ๋ค์ ๋ฐ๋์ ํํฐ์ ์ ํ ๋น ๋ฐ์ง๋ง, ํ๋ฐ ์ปจ์๋จธ๋ฅผ ํ ํฝ์ ํ ๋น ๋ฐ์ง ๋ชปํ ์๋ ์์ต๋๋ค.
๋ค๋ง, ๊ทธ๋ฆผ์๋ ๋์ค๋ฏ์ด ๊ตฌ๋ ํ๋ ํ ํฝ์ด 2๊ฐ ์ด์์ด๋ผ๋ฉด, ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ด๋ฃจ๋ ์ด๋ฐ ์ปจ์๋จธ๋ค์ด ๋ง์ ๋ถํ๋ฅผ ๋ฐ๊ณ , ๋๋จธ์ง ์ปจ์๋จธ๋ idle ์ํ๊ฐ ๋ ์ ์์ต๋๋ค. ๊ธฐ๊ป ์ปจ์๋จธ๋ฅผ ๋ํ๋ก์ด ํ๋๋ฐ, ๋ ธ๋ ๊ฒ๋ค์ด ์์ผ๋ฉด ์ ๋๊ฒ ์ฃ ? ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ์๋ ๊ฒ์ด RoundRobinAssignor ์ ๋๋ค!
RoundRobin Assignor
Confluent: Consumer Group Protocol
Range Assignor์ ๊ฒฝ์ฐ, ์ด๋ฐ ์ปจ์๋จธ๊ฐ ๋ง์ ํํฐ์ ์ด ํ ๋น๋์ด ํซ์คํ์ด ๋ฐ์ํ ์ ์์์ต๋๋ค. RoundRobin Assignor๋ ์ด๋ฅผ ๊ฐ์ ํ๊ณ ์ ๋์จ ํ ๋น ๋ฐฉ์์ ๋๋ค.
RoundRobin์์๋ ๊ตฌ๋
ํ๋ ๋ชจ๋ ํ ํฝ์ ํ ํฝ์ ํํฐ์
์ ํ๋๋ก ๋ชจ์์ ํ ๋น์ ์งํํฉ๋๋ค. ์์ ์ฌ์ง์ ๊ฒฝ์ฐ [customers-P0, customers-P1, orders-P0, orders-P1]
์ฒ๋ผ ๋ชจ๋ ํ ํฝ-ํํฐ์
์์ ๋ชจ์ ํ, ์ด๋ฅผ ๊ฐ ์ปจ์๋จธ๋ฅผ ์ํํ๋ฉฐ ํ ๋น ํฉ๋๋ค.
๋ง์ฝ ์ปจ์๋จธ์ ๊ฐฏ์๊ฐ ํ ํฝ-ํํฐ์ ์ ์๋ณด๋ค ์ ๋ค๋ฉด, ๋ชจ๋ ํ ํฝ์ด ์ ์ด๋ ํ๋ ์ด์์ ํํฐ์ ์ ํ ๋น ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ณด์ฅ ํฉ๋๋ค. ์ด๊ฒ์ idle ์ปจ์๋จธ๊ฐ ์๋ค๋ ๊ฒ์ ๋งํฉ๋๋ค.
๋ฐ๋ฉด์, ์ปจ์๋จธ ๊ฐฏ์๊ฐ ํ ํฝ-ํํฐ์ ์๋ณด๋ค ๋ง๋ค๋ฉด, idle ์ปจ์๋จธ๊ฐ ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ ์ดํ์ ๋์ฌ ๊ฐ์ ๋ ํ ๋น ์ ์ฑ ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ํฉ๋๋ค.
Rebalancing
์ปจ์๋จธ์ ์ ๊ท ๋ฑ๋ก ๋๋ ํํด, ํ ํฝ ํํฐ์ ์ ์ฆ๊ฐ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ๋ธ๋ก์ปค๋ โ๋ฆฌ๋ฐธ๋ฐ์ฑโ์ ํธ๋ฆฌ๊ฑฐ ํฉ๋๋ค.
JoinGroup
, SyncGroup
๊ณผ ๊ฐ์ ์์๋ฅผ ๋ณด๋ฉด, ์ปจ์๋จธ ์ชฝ์์ ๋ธ๋ก์ปค์๊ฒ Request๋ฅผ ๋ณด๋๋๋ฐ์. ๋ธ๋ก์ปค๋ โ๋ฆฌ๋ฐธ๋ฐ์ฑโ์ ์ด๋ป๊ฒ ํธ๋ฆฌ๊ฑฐ ํ๋ ๊ฒ์ผ๊น์?
๋ฆฌ๋ฐธ๋ฐ์ฑ์ด ํ์ํ ์ํฉ์ด ๋ฐ์ํ๋ฉด, ๋ธ๋ก์ปค๋ ์ปจ์๋จธ ์์ฒญ์ ๋ํ ์๋ต์ผ๋ก REBALANCE_IN_PROGRESS
๋ฅผ ๋ณด๋
๋๋ค. ์ปจ์๋จธ๋ ๋ธ๋ก์ปค์๊ฒ ์ฃผ๊ธฐ์ ์ผ๋ก ํํธ๋นํธ(Heartbeat
) ์์ฒญ์ ๋ณด๋ด๋๋ฐ, ์ด ์๋ต์ผ๋ก ๋ฆฌ๋ฐธ๋ฐ์ฑ์ด ํ์ํ๋ค๊ณ ๋ณด๋ด๋ ๊ฒ์ด์ฃ .
REBALANCE_IN_PROGRESS
์๋ต์ ๋ฐ์ ์ปจ์๋จธ๋ ํ์ฌ ํ ๋น๋ ๋ชจ๋ ํํฐ์
์ ํด์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ธ๋ก์ปค์๊ฒ ๋ค์ JoinGroup
์์ฒญ์ ์ ์กํฉ๋๋ค.
์ปจ์๋จธ ์ชฝ์์๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ ํด์ผ ํ๋ค๋ ์๋ต์ ๋ฐ์ผ๋ฉด, onPartitionsRevoked
์ฝ๋ฐฑ์ ์คํํ๊ณ , SyncRequest
์ ์๋ต์ผ๋ก ํํฐ์
์ ํ ๋น ๋ฐ์ผ๋ฉด onPartitionsAssigned
์ฝ๋ฐฑ์ ์คํํฉ๋๋ค.
Stop-the-world Rebalance
๋ฆฌ๋ฐธ๋ฐ์ฑ์ ์ปจ์๋จธ ๊ทธ๋ฃน์ ๊ตฌ๋ ์ํ๋ฅผ ์์ ํ ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ ์์ฃผ์์ฃผ ๋น์ผ ์์ ์ด๊ณ , ์ด๋ก ์ธํด์ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ฒ๋ฆฌ๊ฐ ํฌ๊ฒ ์ง์ฐ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์๊ฒ๋ ์ ์ด ์์ ์๋ฃ ๋ ์ ์์ง๋ง, ๊ธธ๋ฉด ๋ช ๋ถ ์ ๋ ๊ธฐ๋ค๋ ค์ผ ํ ์๋ ์๋ค๊ณ ํฉ๋๋ค.
Confluent: Consumer Group Protocol
๊ธฐ์กด์ ๋ฆฌ๋ฐธ๋ฐ์ฑ ๊ณผ์ ์ ํํฐ์ ํ ๋น์ ๋ฐ๊พธ๊ธฐ ์ ์ ๋ชจ๋ ์ปจ์๋จธ๊ฐ ํ ๋น ๋ฐ์ ํํฐ์ ์ Revoke ํ๋๋ก ํฉ๋๋ค. ์ด๋ก ์ธํด ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ์ผ์ ์ค๋จ ๋๋ค๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ ํ๋ก ๊ฐ์ ํํฐ์ ์ ํ ๋น ๋ฐ๋ ์ปจ์๋จธ๊ฐ ์๋๋ผ๋ ๊ทธ๋ค์ด ๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ ํํฐ์ ์ด ์๋ ๋ค๋ฅธ ํํฐ์ ์ ํ ๋น ๋ฐ๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ์์์ต๋๋ค.
Sticky Assignor
Confluent: Consumer Group Protocol
Sticky Assignor๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ดํ์ ์ปจ์๋จธ๊ฐ ์์ ์ด ์ฒ๋ฆฌํ๋ ํํฐ์ ์ ์ต๋ํ ๊ทธ๋๋ก ์ ์งํ๋๋ก ํ ๋นํ๋ ๋ฐฉ์์ ๋๋ค.
๋ณธ๋ Round Robin Assignor์ ํน์ง์ธ โ๊ฐ ์ปจ์๋จธ๊ฐ ์ฒ๋ฆฌํ๋ ํํฐ์ ์ ๊ฐฏ์๋ ๋ชจ๋ ๊ฐ๊ฑฐ๋ ์ต๋ ํ๋ ์ ๋๋ง ์ฐจ์ด๋๊ฒ ํ๋ค.โ๋ผ๋ ํน์ง์ ๊ฐ๋๋ฐ, ์ด๋ฅผ ํ์ฉํด ํํฐ์ ํ ๋น์ ์กฐ์ ํฉ๋๋ค. ์ด ๋ช ์ ๋ฅผ ๊ฑฐ๊พธ๋ก ํ๋ฉด, ์ฌํ ๋น ๊ณผ์ ์์ ๊ธฐ์กด ์ปจ์๋จธ์ ์ ๊ท ์ปจ์๋จธ์ ํํฐ์ ์ฐจ์ด๊ฐ 2๊ฐ ์ด์ ์ฐจ์ด๊ฐ ๋๋ฉด ์ฌํ ๋น ๋์์ด ๋ฉ๋๋ค. ๋ง์ฝ, ๋ ์ด์ ์ฐจ์ด ๋์ง ์๋๋ค๋ฉด, ๊ทธ ์ปจ์๋จธ์ ํํฐ์ ํ ๋น์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.
์์ ์บก์ณ์ ํจ๊ป ์ดํด๋ด
์๋ค. ์ํฉ์ Consumer 3
๊ฐ ์ถ๊ฐ ๋ ์ํฉ์
๋๋ค. ์ด๋, ์ปจ์๋จธ๊ฐ ์ฒ๋ฆฌํ๋ ํํฐ์
๊ฐฏ์๊ฐ ์ต๋ ํ๋๋ง ์ฐจ์ด ๋์ผ ํ๋๋ฐ, Consumer 1
๊ณผ Consumer 3
์ด 2๊ฐ์ 0๊ฐ๋ก ๋ ๊ฐ ์ฐจ์ด๊ฐ ๋ฉ๋๋ค. ๋ฐ๋ฉด์ Consumer 1
์ 1๊ฐ์ 0๊ฐ๋ก ํ๋๋ง ์ฐจ์ด ๋๋ฏ๋ก ํํฐ์
์กฐ์ ์ ๋์์ด ๋์ง ์์ต๋๋ค. ๊ทธ๋์ Consumer 1
์์ ์ฒ๋ฆฌํ๋ ํํฐ์
์ค ํ๋์ธ p2
๋ฅผ ํด์ ํ๊ณ ์ด๋ฅผ Consumer 3
์ ํ ๋น ํ๋๋ก ํฉ๋๋ค.
ํ์ง๋ง, Sticky Assignor๋ Stop-the-world ๋ฌธ์ ๋ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฆฌ๋ฐธ๋ฐ์ฑ์ด ์ด๋ค์ง๋ ๊ณผ์ ์์ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ฒ๋ฆฌ๊ฐ ์ค๋จ๋๋ ๊ฒ์ ํผํ ์ ์์ต๋๋ค.
Cooperative Sticky Assignor
๋ฆฌ๋ฐธ๋ฐ์ฑ ๊ณผ์ ์์ ์ปจ์๋จธ ๊ทธ๋ฃน ์ ์ฒด์ ์ฒ๋ฆฌ๊ฐ ์ค๋จ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๊ฐ๋ฐ๋ ๊ฒ์ด Cooperative Sticky Assignor ์ ๋๋ค.
์์์ ์ดํด๋ณธ Assignor๋ค์ JoinGroup
-SyncGroup
์์ฒญ์ ํ๋ฒ๋ง ์ํํ๋๋ฐ, Cooperative Sticky Assignor๋ JoinGroup
-SyncGroup
์์ฒญ์ 2๋ฒ ์ํํฉ๋๋ค!
Confluent: Consumer Group Protocol
์ฒซ๋ฒ์งธ ๊ณผ์ ์์๋ ํ์ฌ JoinGroup
์ผ๋ก ๋ฉค๋ฒ ํํฉ๋ง ํ์
ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ SyncGroup
์์๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ ๊ฒฐ๊ณผ๋ก ํ ๋น ํด์ ํ ํํฐ์
์ ๋ํด์๋ง revoke ํฉ๋๋ค. ์ด๋, revoke ๋์์ด ๋์ง ์์ ๋๋จธ์ง ํํฐ์
์ ์ฒ๋ฆฌ๋ฅผ ๊ณ์ ์ด์ด์ง๋๋ค!
Confluent: Consumer Group Protocol
๋๋ฒ์ฌ ๊ณผ์ ์์๋ ํ๋ฒ๋ JoinGroup
๊ณผ SyncGroup
์ ์ํํฉ๋๋ค. ์ด๋, SyncGroup
์ ์๋ต์ผ๋ก revoke ํ๋ ํํฐ์
์ ๋ค๋ฅธ ์ปจ์๋จธ๊ฐ ๋ฐ์์ ์ฒ๋ฆฌ๋ฅผ ์งํํฉ๋๋ค.
๊ธฐ์กด์๋ revoke์ ์ฌํ ๋น์ด ํ๋ฒ์ ์ด๋ค์ ธ์ ์ ์ฒด revoke ํ์ ์ฌํ ๋น์ ์งํํ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ Cooperative Sticky Assignor์์๋ revoke์ ์ฌํ ๋น ๊ณผ์ ์ two-step์ผ๋ก ๋ถ๋ฆฌํ์ฌ stop-the-world ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค!!
๋งบ์๋ง
์นดํ์นด๋ฅผ ์ฒ์ ๊ณต๋ถํ ๋, ์ ํํฐ์ ํ ๋น ์ ์ฑ ์ ๊ณต๋ถํ๋ ๊ธฐ์ต์ด ์๋๋ฐ, ๊ทธ๋๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ด ํ ํฝ ํ๋๋ง์ subscribe ํ ๋๋ฅผ ์๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. 2๋ ๋์ ์นดํ์นด์ ๋ํ ๊ฒฝํ์น๊ฐ ์์๊ณ , ์ ํํฐ์ ํ ๋น ์ ์ฑ ์ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด ์ปจ์๋จธ ๊ทธ๋ฃน์ด ํ ํฝ์ 2๊ฐ ์ด์ subscribe ํ ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ดํดํด์ผ ํ๋ค๋ ๊ฑธ ๊นจ๋ซ๊ฒ ๋์์ต๋๋ค.
์์ผ๋ก ํ์ฌ์์ ๋ ๋ง์ ์คํธ๋ฆฌ๋ฐ ETL๊ณผ ์คํธ๋ฆฌ๋ฐ Application์ ๊ฐ๋ฐํด๋ณด๊ณ ์ถ์ต๋๋ค. ์ง๊ธ ๊ณต๋ถํ๋ ๊ฒ๋ค์ด ์ธ์ ๊ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ฉฐ ใ ใ ์ค๋๋ ํ์ํ!