728x90
Kafka의 기본 원칙:
“하나의 파티션은 같은 group 내에서 오직 하나의 consumer만 읽을 수 있다.”
Q. 토픽을 구독하는 Consumer의 Group ID
🔹 1. group.id가 같으면?
→ Kafka는 해당 Consumer들을 하나의 Consumer Group으로 인식
→ 파티션 수만큼 분할해서 각각에게 메시지를 보냄
→ 메시지 한 개는 오직 하나의 Consumer만 읽음
🔹 2. group.id가 다르면?
→ Kafka는 각 group이 전혀 다른 독립적인 소비자라고 간주
→ 동일한 메시지를 모든 group이 각각 읽음 (브로드캐스트처럼)
Q. Group ID가 같은 여러 개의 Consumer 가 어떻게 파티션을 나눠서 메세지를 받을까?
🔹 Kafka에서는 같은 group.id를 가진 Consumer들이 하나의 Consumer Group으로 묶이고,
이 그룹 내에서 파티션 수만큼 파티션을 컨슈머들에게 자동으로 분배합니다.
이 분배 과정은 Coordinator와 Partition Assignment Strategy에 의해 자동으로 이루어집니다.
Q. 각 파티션을 소비하고 남는 나머지 Consumer 는?
🔹나머지 Consumer들은 할당받을 파티션이 없어서 idle (대기 상태)가 됩니다
하나의 소비 그룹에서 하나의 토픽(여러개 파티션)을 소비할 때
group.id = my-group
Topic logs (3 partitions)
├─ partition 0 → Consumer A → offset: 13
├─ partition 1 → Consumer B → offset: 47
└─ partition 2 → Consumer C → offset: 22
여러 개의 소비 그룹에서 하나의 토픽(여러 개 파티션)을 소비할 때
* 각 소비 그룹은 메세지를 중복해서 처리한다.
Topic logs (3 partitions)
├─ partition 0
├─ partition 1
└─ partition 2
Group: group-A
├─ Consumer A1 → partition 0, 1
└─ Consumer A2 → partition 2
Group: group-B
├─ Consumer B1 → partition 0, 2
└─ Consumer B2 → partition 1
여러 개의 소비 그룹에서 하나의 토픽(하나의 파티션)을 소비할 때
* 각 소비 그룹은 메세지를 중복해서 처리한다
* group-A가 받은 메세지를 group-B도 받는다.
Topic logs (1 partition: partition-0)
Group: group-A
└─ Consumer A1 → partition-0 → offset: 50
Group: group-B
└─ Consumer B1 → partition-0 → offset: 20
Group: group-C
└─ Consumer C1 → partition-0 → offset: 0
각 소비 그룹은 메세지를 중복해서 처리한다는 의미
partition-0: [msg-1] [msg-2] [msg-3] ...
Consumer A (group-A) → msg-1, msg-2, msg-3 ...
Consumer B (group-B) → msg-1, msg-2, msg-3 ...
Consumer C (group-C) → msg-1, msg-2, msg-3 ...
'아키텍처 > Kafka & RabbitMQ' 카테고리의 다른 글
[Messaging] RabbitMQ 도입편 (0) | 2025.03.18 |
---|---|
[Messaging] RabbitMQ 도입 구상편 (0) | 2025.03.18 |
[Messaging] RabbitMQ 개념편 (0) | 2025.03.14 |