๐ก ์ด๋ฒ ํฌ์คํ ์์๋ Consumer์ ๋ํด ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Consumer(์ดํ ์ปจ์๋จธ)๋ ํ๋ก๋์๊ฐ ๋ธ๋ก์ปค์ ์ ์กํ ๋ฉ์์ง๋ฅผ ์ฝ๋ ์ญํ ์ ์ํํฉ๋๋ค.
์ปจ์๋จธ๋ ๋ฐ๋์ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ํด์ผ ํ๋ฉฐ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ์ปจ์๋จธ๋ค์ ํ ํฝ ํํฐ์ ๋ณ๋ก ๋ถ๋ฐฐ๋ฉ๋๋ค.
์ํ์น์ ์ปจํ๋ฃจ์ธํธ ๊ณต์ ๋ฌธ์์์๋ ์๋์ ๊ฐ์ด ์ค๋ช ํ๊ณ ์์ต๋๋ค.
์ปจ์๋จธ๋ ์คํ์ ์์น์์ ์์ํ๋ ๋ก๊ทธ๋ฅผ ๋ฐ๋๋ค๊ณ ํฉ๋๋ค. ๋ํ ์คํ์ ์์น๋ฅผ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๊ฐ์ ธ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ ๋ํ ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ ์คํ์ ์์น๋ __consumer_offset ํ ํฝ์ ์ ์ฅํฉ๋๋ค.
๐ข ์์ ์ปจ์๋จธ๊ฐ ํ๋ก๋์๊ฐ ๋ธ๋ก์ปค์ ์ ์กํ ๋ฉ์์ง๋ฅผ ์ฝ์ด์จ๋ค๊ณ ํ๋๋ฐ, ์ ํํ ์๊ธฐํ๋ฉด ์ปจ์๋จธ๊ฐ subscribe(๊ตฌ๋ )ํ๊ณ ์๋ ํ ํฝ์ ํํฐ์ ์ค ๋ฆฌ๋ ํํฐ์ ์์ ๋ฉ์์ง๋ฅผ ์ฝ์ด์ต๋๋ค.
์๋ ์ปจํ๋ฃจ์ธํธ ๊ณต์ ๋ฌธ์์ consumer groups์ ๋ณด๋ค ์์ธํ๊ฒ ์ค๋ช ๋์ด ์์ต๋๋ค.
consumer groups
์ปจ์๋จธ ๊ทธ๋ฃน์ ์ผ๋ถ ํ ํฝ์ ๋ฐ์ดํฐ๋ฅผ consume ํ๊ธฐ ์ํด ํ๋ ฅํ๋ ์ปจ์๋จธ ์งํฉ์ ๋๋ค. ๋ชจ๋ ํ ํฝ์ ํํฐ์ ์ ๊ทธ๋ฃน์ ์ปจ์๋จธ ๊ฐ์ ๋ถํ ๋ฉ๋๋ค. ์ ๊ทธ๋ฃน ๊ตฌ์ฑ์์ด ๋์ฐฉํ๊ณ ์ด์ ๊ตฌ์ฑ์์ด ๋ ๋๋ฉด ๊ฐ ๊ตฌ์ฑ์์ด ํํฐ์ ์ ๋น๋ก์ ๋ชซ์ ๋ฐ๋๋ก ํํฐ์ ์ด ๋ค์ ํ ๋น๋ฉ๋๋ค. ์ด๋ฅผ Group Rebalancing์ด๋ผ๊ณ ํฉ๋๋ค.
์ด์ ๋ฒ์ ์ ์ปจ์๋จธ์ ์๋ก์ด ์ปจ์๋จธ์ ์ฃผ์ ์ฐจ์ด์ ์ ์ ์๋ ๊ทธ๋ฃน ๊ด๋ฆฌ๋ฅผ ์ํด ZooKeeper์ ์์กดํ๋ ๋ฐ๋ฉด ํ์๋ Kafka ์์ฒด์ ๋ด์ฅ๋ ๊ทธ๋ฃน ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ํ๋กํ ์ฝ์์ ๋ธ๋ก์ปค ์ค ํ ๋ช ์ด ๊ทธ๋ฃน์ ์ฝ๋๋ค์ดํฐ๋ก ์ง์ ๋๊ณ ๊ทธ๋ฃน ๊ตฌ์ฑ์ ๋ฐ ํํฐ์ ํ ๋น ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
๊ฐ ๊ทธ๋ฃน์ ์ฝ๋๋ค์ดํฐ๋ ์ปค๋ฐ๋ ์คํ์ ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ด๋ถ ์คํ์ ํญ๋ชฉ __consumer_offsets์ ๋ฆฌ๋์์ ์ ํ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๋ฃน์ ID๋ ์ด ํ ํฝ์ ๋ํ ํํฐ์ ์ค ํ๋์ ํด์๋๊ณ ํด๋น ํํฐ์ ์ ๋ฆฌ๋๊ฐ ์ฝ๋๋ค์ดํฐ๋ก ์ ํ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ปจ์๋จธ ๊ทธ๋ฃน์ ๊ด๋ฆฌ๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ธ๋ก์ปค์ ๊ฑธ์ณ ๋๋ต ๊ท ๋ฑํ๊ฒ ๋ถํ ๋๋ฉฐ, ์ด๋ ๋ธ๋ก์ปค ์๋ฅผ ๋๋ ค ๊ทธ๋ฃน ์๋ฅผ ํ์ฅํ ์ ์๋๋ก ํฉ๋๋ค.
์ปจ์๋จธ๊ฐ ์คํ๋๋ฉด ํด๋น ๊ทธ๋ฃน์ ์ฝ๋๋ค์ดํฐ๋ฅผ ์ฐพ๊ณ ๊ทธ๋ฃน ๊ฐ์ ์์ฒญ์ ๋ณด๋ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฝ๋๋ค์ดํฐ๋ ๊ทธ๋ฃน ์ฌ์กฐ์ ์ ์์ํ์ฌ ์ ๊ตฌ์ฑ์์ด ๊ทธ๋ฃน ํํฐ์ ์ ๊ณตํํ ๋ชซ์ ํ ๋น๋ฐ๋๋ก ํฉ๋๋ค. ๋ชจ๋ ์ฌ์กฐ์ ์ ๊ทธ๋ฃน์ ์๋ก์ด ์ธ๋๋ก ์ด์ด์ง๋๋ค.
๊ทธ๋ฃน์ ๊ฐ ๊ตฌ์ฑ์์ ๊ทธ๋ฃน ๊ตฌ์ฑ์์ผ๋ก ๋จ์ ์์ผ๋ ค๋ฉด ์ฝ๋๋ค์ดํฐ์๊ฒ heartbeat๋ฅผ ๋ณด๋ด์ผ ํฉ๋๋ค. ๊ตฌ์ฑ๋ session timeout์ด ๋ง๋ฃ๋๊ธฐ ์ ์ heartbeat๊ฐ ์์ ๋์ง ์์ผ๋ฉด ์ฝ๋๋ค์ดํฐ๋ ํด๋น ๊ตฌ์ฑ์์ ๊ทธ๋ฃน์์ ์ถ๋ฐฉํ๊ณ ํด๋น ํํฐ์ ์ ๋ค๋ฅธ ๊ตฌ์ฑ์์๊ฒ ์ฌํ ๋นํฉ๋๋ค.
์ปจ์๋จธ ๊ทธ๋ฃน์์ ์ธ๊ธ๋ ๋ด์ฉ ์ค Group Coordinator์ Heartbeat ๋ถ๋ถ์ ๋ํด ๋ ์์ธํ๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
Group Coordinator
group coordinator๋ ์๋ก์ด ์ปจ์๋จธ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ๊ธฐ์กด ์ปจ์๋จธ๊ฐ ์ข ๋ฃ๋ ๋, ๋๋ ํ ํฝ์ ์๋ก์ด ํํฐ์ ์ด ์ถ๊ฐ๋ ๋ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด์ ์ปจ์๋จธ๋ค์๊ฒ ํํฐ์ ์ ์ฌ ํ ๋นํ๋ Rebalancing์ ์ํํ๋๋ก ์ง์ํฉ๋๋ค.
์ปจ์๋จธ ๊ทธ๋ฃน, group coordinator์ ์ปจ์๋จธ์ ๋์ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
1. ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด์ ์ปจ์๋จธ๊ฐ ๋ธ๋ก์ปค์ ์ต์ด ์ ์ ์์ฒญ ์ Group Coordinator ์์ฑ
2. ๋์ผ group.id๋ก ์ฌ๋ฌ ๊ฐ์ ์ปจ์๋จธ๋ก ๋ธ๋ก์ปค์ Group Coordinator๋ก ์ ์
3. ๊ฐ์ฅ ๋นจ๋ฆฌ ๊ทธ๋ฃน์ join ์์ฒญ์ ํ ์ปจ์๋จธ์๊ฒ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด์ ๋ฆฌ๋ ์ปจ์๋จธ๋ก ์ง์
4. ๋ฆฌ๋๋ก ์ง์ ๋ ์ปจ์๋จธ๋ ํํฐ์ ํ ๋น ์ ๋ต์ ๋ฐ๋ผ ์ปจ์๋จธ๋ค์๊ฒ ํํฐ์ ํ ๋น
5. ๋ฆฌ๋ ์ปจ์๋จธ๋ ์ต์ข ํ ๋น๋ ํํฐ์ ์ ๋ณด๋ฅผ Group Coordinator๋ก ์ ๋ฌ
6. ์ ๋ณด ์ ๋ฌ ์ฑ๊ณต์ ๊ณต์ ํ ๋ค ๊ฐ๋ณ ์ปจ์๋จธ๋ค์ ํ ๋น๋ ํํฐ์ ์์ ๋ฉ์์ง ์ฝ์
์ ๋ฆฌํ๋ฉด Group Coordinator๋ ๊ฐ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ณ๋ก ์์ฑ๋๊ณ , ์ํด ์๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ฆฌ๋ ์ปจ์๋จธ๋ฅผ ์ ๋ณํ๋ ์ญํ ์ ํ๋ฉฐ ๊ฐ ๊ทธ๋ฃน ๋ด์ ์ปจ์๋จธ๋ค์ด ์์ฑ/์ข ๋ฃ๋จ์ ๋ฐ๋ผ Rebalancing์ ์ํํ๋๋ก ์ง์ํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
์ด๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ํฉ์ ๋ฐ๋ผ ์ํ๋ฅผ ๊ฐ๋๋ฐ ์ด๋ฅผ Consumer Group State๋ผ๊ณ ํฉ๋๋ค.
Consumer Group State
๋ชจ๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ ํ๋์ ํน์ ์ํ๋ฅผ ๊ฐ์ต๋๋ค. ํ์ฉ๋๋ ์ํ๋ GroupMetatda ํด๋์ค์ ์ ์๋์ด ์์ผ๋ฉฐ ์๋์ ๊ฐ์ด 5๊ฐ์ ์ํ๊ฐ ์์ต๋๋ค.
- Empty: ์ปจ์๋จธ ๊ทธ๋ฃน์ ์กด์ฌํ์ง๋ง ๋ ์ด์ ์ปจ์๋จธ๊ฐ ์์ต๋๋ค.
- Stable: Rebalance๊ฐ ์ข ๋ฃ๋๊ณ ์์ ์ ์ผ๋ก ์ปจ์๋จธ๊ฐ ์ด์๋๊ณ ์์ต๋๋ค.
- Rebalance
- PreparingRebalance: ๋ฌด์ธ๊ฐ ๋ณ๊ฒฝ๋์์ผ๋ฉฐ ํํฐ์ ์ฌํ ๋น์ด ํ์ํ๋ฏ๋ก ์นดํ์นด๊ฐ ์ฌ์กฐ์ ์ค์ ๋๋ค.
- CompletingRebalance: ์นดํ๊ฐ ์ฌ์กฐ์ ์ ์ฑ๊ณตํ ์ํ์ ๋๋ค.
- Dead: ๊ทธ๋ฃน์ด ๊ณง ์นดํ์นด ๋ ธ๋์์ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค. ํ๋์ด ์๊ฑฐ๋ ๊ทธ๋ฃน์ด ๋ค๋ฅธ Group Coordinator๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
Rebalance(์ฌ์กฐ์ )์ ๊ด๋ จํด์๋ ์ ์ด๋ฏธ์ง์ ๊ฐ์ด ํฌ๊ฒ Empty, Stable, Rebalance 3๊ฐ์ ์ํ๋ก ํํํ ์ ์๋๋ฐ, Rebalance๋ฅผ ๋ค์ PreparingRebalance, CompletingRebalance, Dead ์ํ๋ก ์ธ๋ถํํ ์ ์์ต๋๋ค.
Heartbeat
์์ Group Coordinator๊ฐ ํํฐ์ ์ ์ฌ์กฐ์ ํด์ผ ํ๋ ์ํฉ์์ Heartbeat failure detected(heartbeat ์คํจ ๊ฐ์ง)๊ฐ ์์ต๋๋ค.
heartbeat๋ ์ง์ญํ๋ฉด '์ฌ์ฅ ๋ฐ๋' ์ธ๋ฐ, ์ปจ์๋จธ์์ heartbeat๋ ๊ฐ ์ปจ์๋จธ๋ค์ด session์ ์ ์งํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก Group Coordinator์๊ฒ heartbeat ์์ฒญ์ ๋ณด๋ ๋๋ค.
์ปจ์๋จธ๊ฐ Group Coordinator์๊ฒ join, leave๋ฑ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์ง๋ง, ์ปจ์๋จธ ์ฅ์ ๋ก ์ธํด leave ์์ฒญ์ ๋ณด๋ด์ง ๋ชปํ ๊ฒฝ์ฐ Group Coordinator๊ฐ ์ด๋ฅผ ๊ฐ์งํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ Group Coordinator๋ ์ด๋ฐ ์ปจ์๋จธ ์ฅ์ ๊ฐ์ง๋ฅผ ์ํด Heartbeat๋ฅผ ํ์ธํฉ๋๋ค.
heartbeat.interval.ms ์ค์ ์ ํตํด ์ผ๋ง์ ์ฃผ๊ธฐ๋ก Group Coordinator๋ก heartbeat ์์ฒญ์ ๋ณด๋ผ์ง ์ค์ ํ ์ ์๋๋ฐ ๋ง์ฝ ์ค์ ํ ์๊ฐ ๋์ heartbeat ์์ฒญ์ด ์ค์ง ์๋๋ค๋ฉด Group Coordinator๋ ํด๋น ์ปจ์๋จธ๊ฐ ์ด์์ด ์๋ค๊ณ ํ๋จํ์ฌ Rebalancing์ ์ง์ํ์ฌ ํด๋น ์ปจ์๋จธ๋ฅผ ์ปจ์๋จธ ๊ทธ๋ฃน์์ ์ ์ธํ๋๋ก ํฉ๋๋ค.
heartbeat ์์ฒญ์ heartbeat thread๊ฐ ๋ณด๋ด๊ฒ ๋๋ฉฐ heartbeat์ ๊ด๋ จ๋ ์ค์ ์ ์๋์ ๊ฐ์ต๋๋ค.
ํ๋ผ๋ฏธํฐ | ๊ธฐ๋ณธ๊ฐ(ms) | ์ค๋ช |
heartbeat.interval.ms | 3000 | Heartbeat Thread๊ฐ Heartbeat๋ฅผ ๋ณด๋ด๋ ๊ฐ๊ฒฉ. session.timeout.ms ๋ณด๋ค ๋ฎ๊ฒ ์ค์ ๋์ด์ผ ํฉ๋๋ค. session.timeout.ms์ 1/3๋ณด๋ค ๋ฎ๊ฒ ์ค์ ์ ๊ถ์ฅํฉ๋๋ค. |
session.timeout.ms | 45000 | ๋ธ๋ก์ปค๊ฐ ์ปจ์๋จธ๋ก Hearbeat๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ต๋ ์๊ฐ์
๋๋ค. ๋ธ๋ก์ปค๋ ์ด ์๊ฐ ๋์ Heartbeat๋ฅผ ์ปจ์๋จธ๋ก๋ถํฐ ๋ฐ์ง ๋ชปํ๋ฉด ํด๋น ์ปจ์๋จธ๋ฅผ ๊ทธ๋ฃน์์ ์ ์ธํ๋๋ก Rebalancing์ ์ง์ํฉ๋๋ค. |
์ฐธ๊ณ ์๋ฃ
- https://seonkyukim.github.io/kafka-rebalancing/
- https://chrzaszcz.dev/2019/06/kafka-rebalancing/
- https://kafka.apache.org/documentation/#theconsumer
- https://docs.confluent.io/platform/current/clients/consumer.html
- <์ค์ ์นดํ์นด ๊ฐ๋ฐ๋ถํฐ ์ด์๊น์ง> - ๊ณ ์น๋ฒ ์ง์
- <์ธํ๋ฐ ์นดํ์นด ์๋ฒฝ ๊ฐ์ด๋ - ์ฝ์ดํธ> - ๊ถ์ฒ ๋ฏผ
'Kafka' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Consumer - 3 (0) | 2023.04.17 |
---|---|
Consumer - 2 (0) | 2023.04.17 |
Producer - 2 (0) | 2023.04.09 |
Partitioner & Partition (0) | 2023.04.08 |
kafka CLI ์ฌ์ฉํ๊ธฐ - kafka-configs.(sh | bat) (0) | 2023.04.08 |
๋๊ธ