IT-Infra/Kafka

kafka - 컨슈머와 컨슈머 그룹

onfact 2023. 12. 31. 15:58
Consumer & Consumer Group

■ 정의

□ kafka consumer
 - 카프카 컨슈머는 kafka에서 메시지를 소비(subscribe-구독)하는 주체.
 - 컨슈머는 특정 토픽의 메시지를 읽어오며, 각 파티션을 메시지를 독립적으로 소비.
□ kafka consumer group
 - 카프카 컨슈머 그룹은 여러개의 컨슈머를 하나로 묶은 단위.
 - 특정 토픽을 여러 컨슈머 그룹이 구독 가능.
 - 컨슈머 그룹 내의 각 컨슈머는 토픽의 파티션을 나눠가져 메시지를 소비하므로, 병렬 처리 가능.

■ 상세 설명

이해가 쉽도록 그림으로 표현 했습니다.
본 설명에서는 토픽은 1개만 존재합니다.

□ 1개의 파티션 <=> 1개의 컨슈머 그룹 + 1개의 컨슈머
  - 1개의 컨슈머가 1개의 파티션을 메시지를 읽어옵니다.

kafka consumer

□ 4개의 파티션 <=> 1개의 컨슈머 그룹 + 1개의 컨슈머
  - 1개의 컨슈머가 2개의 파티션을 메시지를 읽어옵니다.

□ 4개의 파티션 <=> 1개의 컨슈머 그룹 + 4개의 컨슈머
  - 각각 컨슈머가 하나의 파티션에서 메시지를 읽어옵니다.

kafka consumer

□ 4개의 파티션 <=> 1개의 컨슈머 그룹 + 5개의 컨슈머
  - 각각 컨슈머가 하나의 파티션에서 메시지를 읽어옵니다.
     다만 추가된 5번 컨슈머는 매칭될 파티션이 없기때문에 아무런 메시지도 읽지 못 합니다.

kafka consumer

□ 4개의 파티션 <=> 2개의 컨슈머 그룹 + 4개의 컨슈머
  - 
그룹1과 그룹2 컨슈머가 동일하게 파티션의 메시지를 읽어옵니다.
     다만 중간에 그룹을 추가하는 경우, 토픽 전체의 내용을 추가된 컨슈머가 읽게 됩니다.

kafka consumer

■ 정리

- 토픽에 대해 모든 메시지를 받아야 하는 어플리케이션 별로 새로운 컨슈머 그룹을 생성 합니다.
- 토픽에서 메시지를 처리하는 규모를 확장하기 위해서는 컨슈머 그룹에 새로운 컨슈머를 추가함으로써
   해당 그룹내의 컨슈머 각각이 메시지의 일부만을 받아서 처리합니다,
- 토픽의 부하가 증가하면 컨슈머를 추가하여 부하를 분산합니다.
- 컨슈머가 토픽 파티션보다 많을 경우 메시지를 수신 받지 못 합니다.
  토픽과 파티션 - 컨슈머의 대한 설계가 중요한 이유입니다.