아키텍처/Kafka & RabbitMQ

[Kafka] Consumer

코드몬스터 2025. 6. 16. 23:00
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으로 묶이고,
이 그룹 내에서 파티션 수만큼 파티션을 컨슈머들에게 자동으로 분배합니다.
이 분배 과정은 CoordinatorPartition 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