728x90
목차
1. Consumer란
•컨슈머는 컨슈머 API와 이로 구성된 애플리케이션을 의미한다.
•일반적으로 컨슈머가 토픽을 구독(subscribe) 또는 읽는다고 한다.
•이는 컨슈머가 토픽 파티션에 저장된 메시지들을 가져오는 것을 의미한다.
•컨슈머의 특징으로 Polling 구조 / 단일 토픽의 멀티 컨슈밍 / 컨슈밍 그룹이 있다.
•이 3가지 특징으로 더욱 효율적이고 유연한 메시지 구독 기능을 제공한다.
2. Polling 구조
•컨슈머가 브로커로부터 메시지를 요청하는 polling 구조로 설계되어있다.
•즉 컨슈머는 자신이 원하는 만큼의 브로커로 메시지를 요청한다.
•장점: 자신의 환경에 메시지 구독 성능을 최적화 할 수 있다. 브로커는 컨슈머의 환경을 고려할 필요가 없다.
3. 단일 토픽의 멀티 컨슈밍
•하나의 토픽에 서로 다른 컨슈머 애플리케이션이 동시에 구독할 수 있다.
•각 컨슈머가 어느 토픽 파티션의 어느 오프셋까지 읽어 갔는지를 컨슈머 오프셋(‘__consumer_offset’) 토픽에 저장한다.
•장점: 구독 중 중단되었다가 다시 구동하는 경우 어디서부터 메시지를 읽어야하는지 알 수 있다.
•즉 컨슈머의 상태와 관계 없이 안정적인 메시지 구독이 가능하다.
4. 컨슈머 그룹
•브로커는 성능 향상을 위해 하나의 토픽을 여러 파티션으로 병렬 구성하여 처리
•둘 이상의 파티션을 하나의 컨슈머로만 처리하면 성능 상의 문제가 발생할 수 있다.
•하나 이상의 컨슈머가 컨슈머 그룹(Consumer Group)을 구성하여 하나의 토픽을 구독할 수 있다.
•컨슈머 그룹 내의 컨슈머는 토픽 파티션의 소유권(구독권)을 나눠 갖는다.
•만약 컨슈머 그룹에 컨슈머가 추가되거나 이탈하게 되면?
컨슈머 그룹 내부에서 파티션의 소유권이 재조정 된다. -> 리밸런싱(Rebalancing)
5. 리밸런싱 (Rebalancing)
- 리밸런싱이란
- 파티션 소유권: 각 컨슈머가 특정 파티션에 대응되는 것. 컨슈머 그룹의 컨슈머들은 자신들이 읽는 토픽 파티션의 소유권을 공유함
- 리밸런싱: 한 컨슈머로부터 다른 컨슈머로 파티션 소유권을 이전하는 것
- 컨슈머 그룹의 가용성과 확장성을 높여줌, 쉽고 안정하게 컨슈머를 추가/삭제 가능
- 리밸런싱 단점
- 리밸런싱 하는 동안 컨슈머들은 메시지를 읽을 수 없어 해당 컨슈머 그룹 전체가 사용 불가 상태가 된다.
- 한 컨슈머에서 다른 컨슈머로 파티션이 이전될 때, 해당 컨슈머의 이전 파티션에 대한 정보가 삭제 된다.
- 안전한 리밸런싱
- 그룹 조정자(Group Coordinator) : 클래스의 인스턴스로 생성된다.
- 그룹 조정자로 지정된 카프카 브로커에게 컨슈머가 하트비트 전송
- 타임아웃 시간이 경과될 때까지 하트비트 전송을 하지 않으면 리밸런싱 시작
-> 작업이 불가능한 것으로 판단해서 해당 컨슈머의 파티션 소유권을 다른 컨슈머로 이관
6. Consumer 주요 옵션
bootstrap.servers
카프카 클러스터에 처음 연결하기위한 호스트와 포트 정보로 구성된 리스트 정보를 나타낸다.
정의된 포맷은 호스트명:포트, 호스트명:포트, 호스트명:포트 이다.
fetch.min.bytes
한번에 가져올 수 있는 최소 데이터 사이즈
group.id
컨슈머가 속한 컨슈머 그룹을 식별하는 식별자
enable.auto.commit
백그라운드로 주기적으로 오프셋을 커밋 함.
auto.offset.reset
카프카에서 초기 오프셋이 없거나 현재 오프셋이 더 이상 존재하지 않은 경우에 다음 옵션으로 리셋.
- earliest: 가장 초기의 오프셋값으로 설정.
- latest : 가장 마지막의 오프셋값으로 설정.
- none : 이전 오프셋값을 찾지 못하면 에러를 나타냄.
728x90
'스터디 > Kafka' 카테고리의 다른 글
Kafka 아키텍처 및 동작방식(2) - Producer, Message, Option (0) | 2025.01.09 |
---|---|
Kafka 아키텍처 및 동작 방식(1) - Partition, Offset, Broker (0) | 2025.01.08 |
Kafka 주요 용어 정리 (0) | 2025.01.05 |
Kafka 구조 및 구성 요소, Pub/Sub 모델 (0) | 2025.01.04 |
Kafka 기본 개념 및 의미 (0) | 2025.01.03 |
댓글