Consumer
Consumer 주제의 핵심 개념과 적용 포인트를 정리합니다.
Consumer
Consumer의 역할
Kafka Consumer는 토픽을 구독하고 파티션 데이터를 읽어 비즈니스 로직을 수행한다.
다른 메시징 시스템의 subscriber/reader에 해당하는 역할이다.
Kafka는 push가 아니라 pull 모델이므로, Consumer가 직접 poll 요청으로 레코드를 가져온다.
이 구조는 소비 속도를 애플리케이션이 제어하기 쉽다는 장점이 있다.
Offset이 중요한 이유
Offset은 파티션 내 메시지의 위치를 나타낸다.
Consumer는 “어디까지 처리했는가”를 오프셋으로 기록하고, 재시작 시 그 지점 이후부터 다시 처리한다.
이 메커니즘 덕분에 다음이 가능하다.
- 장애 후 복구
- 중단 지점부터 재처리
- 소비 지연(lag) 측정
Consumer Group으로 확장하기
Consumer Group은 같은 토픽을 병렬 처리하기 위한 기본 단위다.
같은 그룹 내에서는 파티션이 분배되어 처리되고, 한 Consumer 장애 시 다른 Consumer가 파티션을 재할당받아 이어서 처리한다.
다만 중요한 제약이 있다.
- 그룹 내 동시 활성 Consumer 수는 파티션 수를 초과해도 실제 병렬성은 늘지 않는다.
- 즉, 확장 계획은 “Consumer 수”가 아니라 “파티션 수”와 함께 설계해야 한다.
운영 관점에서 자주 보는 상황
- 처리 지연 증가: Producer 유입량이 Consumer 처리량을 넘으면 lag가 누적된다.
- 재시작/배포 이벤트: 리밸런스가 잦으면 일시적 처리 공백이 늘어난다.
- 용도별 소비 분리: 같은 토픽을 여러 Consumer Group이 각각 독립적으로 소비할 수 있다.
이 구조를 잘 활용하면, 하나의 이벤트 스트림을 분석/알림/적재 등 여러 목적에 동시에 재사용할 수 있다.
This post is licensed under CC BY 4.0 by the author.