Consumer Group
메시지를 효율적으로 처리하기 위해 여러 개의 컨슈머(Consumer)를 묶어 관리하는 논리적인 단위
아래 예시 상황을 살펴보자.
한 개의 Topic 안에 5개의 Partition이 존재하고 , 3개의 Consumer로 구성된 Consumer Group이 존재한다. 이때, 각각의 Consumer는 각각 다른 Partition에서 데이터를 읽게 된다. Consumer1은 Partition 0과 1, Consumer2는 Partition 2와 3 Consumer3는 Partition 4의 데이터를 각각 읽는다. 이렇게 같은 Consumer Group 안의 모든 Consumer는 읽기를 공유한다.
⇒ 이와 같은 방식으로 그룹이 Kafka 토픽 전체를 읽게 된다.
Consumer Group 안의 Consumer가 Partition의 개수보다 많은 경우
Partition 수를 넘어가는 Consumer들은 비활성화된다. 즉, 대기(stand by) Consumer가 된다.
하나의 Topic에 다수의 Consumer Group이 존재하는 경우
각각의 Consumer Group을 사용하기 위해 `group.id`라는 Consumer Property를 사용해 Consumer Group에 이름을 정할 수 있다.
이를 통해 Consumer는 자신이 속한 그룹을 알 수 있다.
Consumer Offset
Consumer가 Topic의 Partition에서 읽은 마지막 메시지의 위치를 나타내는 값
- Consumer Offset은 Kafka 내부의 `__consumer_offsets`라는 특별한 Topic에 저장된다.
Consumer Group 안에 Consumer가 존재하고, Offset을 커밋(Commit)할 것이다. Offset이 Commit되면 그 Consumer는 해당 Offset부터 계속 데이터를 읽을 수 있게 된다.
중요성
- Offset을 통해 Consumer는 메시지를 순서대로 처리할 수 있다.
- Consumer가 재실행되거나 장애가 발생하더라도, 마지막으로 읽은 Offset부터 다시 읽기를 시작할 수 있다.
- 메시지를 중복 처리하거나 누락하는 것을 방지할 수 있다.
'Kafka' 카테고리의 다른 글
[Kafka] Consumer & Deserializer (0) | 2024.11.12 |
---|---|
[Kafka] Producer & Message Key (0) | 2024.11.12 |
[Kafka] Topic, Partition, Offset에 대하여 (0) | 2024.11.07 |