Kafka Listener는 Apache Kafka로부터 데이터를 소비하는 역할을 수행하는 Spring Kafka의 기능입니다.
Kafka에서 토픽(topic)에 쌓인 메시지를 리스너가 구독하여 처리합니다. Spring Kafka는 이를 손쉽게 구현할 수 있는 @KafkaListener 어노테이션을 제공합니다.
Kafka Listener의 동작 원리
- Producer가 메시지를 토픽에 전송합니다.
- Consumer는 특정 토픽을 구독하여 메시지를 읽습니다.
- Kafka Listener는 Consumer 역할을 하며, Kafka 브로커에서 데이터를 가져와 비즈니스 로직을 실행합니다.
Kafka Listener 기본 구성
Kafka Listener를 사용하려면 다음을 설정해야 합니다:
- Kafka 설정 (Producer와 Consumer Configuration)
- Kafka Listener 구현
- 토픽 생성 및 테스트
Kafka 리스너는 데이터를 소비하는 방식에 따라 여러 종류로 분류됩니다. 각각의 리스너는 특정 요구사항과 사용 사례에 적합하며, Spring Kafka에서 주로 사용하는 리스너의 종류는 다음과 같습니다:
1. 단일 메시지 리스너 (Single Message Listener)
- 특징: 한 번에 하나의 메시지를 처리합니다.
- 사용 사례: 메시지가 작거나 메시지마다 개별적인 처리가 필요한 경우.
- 구현: 기본 @KafkaListener를 사용.
2. 배치 리스너 (Batch Listener)
- 특징: 한 번에 여러 메시지를 묶음(batch)으로 처리합니다.
- 사용 사례: 고속 처리 및 대량 메시지 처리에 유리.
- 구현: @KafkaListener와 함께 배치 컨테이너 팩토리 설정 사용.
3. Acknowledgment 리스너 (Manual Acknowledgment Listener)
- 특징: 메시지 소비 후 수동으로 오프셋(commit)을 관리합니다.
- 사용 사례: 처리 성공 여부에 따라 오프셋을 커밋해야 하는 경우.
- 구현: Acknowledgment 객체 사용.
4. 컨슈머 레코드 리스너 (ConsumerRecord Listener)
- 특징: 메시지에 대한 메타데이터(토픽, 파티션, 오프셋 등)를 포함한 **ConsumerRecord**를 처리합니다.
- 사용 사례: 메시지 외에 메타데이터가 필요한 경우.
5. 키-값 리스너 (Key-Value Listener)
- 특징: 메시지의 키(key)와 값(value)을 개별적으로 처리합니다.
- 사용 사례: 메시지 키를 기반으로 추가 처리가 필요한 경우.
6. 파티션 리스너 (Partition Listener)
- 특징: 특정 파티션에서만 메시지를 소비합니다.
- 사용 사례: 특정 파티션의 데이터만 처리해야 하는 경우.
7. 배치 레코드 리스너 (Batch ConsumerRecord Listener)
- 특징: 여러 ConsumerRecord 객체를 묶어서 한 번에 처리합니다.
- 사용 사례: 배치 처리하면서 메시지의 메타데이터도 필요한 경우.
8. Dead Letter Queue 리스너 (DLQ Listener)
- 특징: 처리 실패한 메시지를 Dead Letter Queue(DLQ)로 전달받아 처리.
- 사용 사례: 실패한 메시지 재처리 또는 분석.
요약
리스너 종류처리 단위주요 사용 사례
단일 메시지 리스너 | 메시지 1개 | 기본 메시지 소비 |
배치 리스너 | 메시지 묶음 (batch) | 대량 데이터 고속 처리 |
Acknowledgment 리스너 | 메시지 1개 (수동 커밋) | 메시지 처리 성공 여부에 따라 커밋 |
컨슈머 레코드 리스너 | 메시지 + 메타데이터 | 메시지와 메타데이터를 함께 처리 |
키-값 리스너 | 키와 값 분리 | 키를 기반으로 추가 처리가 필요한 경우 |
파티션 리스너 | 특정 파티션 | 특정 파티션 데이터만 처리 |
배치 레코드 리스너 | 여러 ConsumerRecord | 배치와 메타데이터를 동시에 처리 |
DLQ 리스너 | Dead Letter 메시지 | 실패한 메시지 재처리 및 분석 |
카프카 리스너의 종류가 많다.
간단한 예제 샘플로는 단일 메시지 리스너를 사용해서만 구현해본 것 같아서 다른 리스너들도 조금씩 사용해보고 올려보고자 한다.
공부를 한다고 하는데 막상 누군가에게 설명하려고 하면 설명이 잘 안되더라.
결국 나혼자 알아서 업무를 하던 뭐를 하면 된다고 생각할 수 있겠지만 공부 했는데 이해 못시키니까 화가나더라
좀 더 이해를 잘 시킬 수 있게 근본 부터 잘 학습해야겠다.
'인프라 > Kafaka' 카테고리의 다른 글
카프카 리스너 종류 2-배치 메시지 리스너 (4) | 2024.12.06 |
---|---|
카프카 리스너 종류 1- 단일 메시지 리스너 (1) | 2024.12.06 |
Kafka의 토픽(Topic)이란 (0) | 2024.11.29 |
kafka의 zookeeper 란 (1) | 2024.11.27 |
안녕? kafaka 너는 누구니 (1) | 2024.11.27 |