인프라/Kafaka

Kafka 리스너(Listener) 개념과 종류

물에서육지로 2024. 12. 6. 12:35

Kafka Listener는 Apache Kafka로부터 데이터를 소비하는 역할을 수행하는 Spring Kafka의 기능입니다.

Kafka에서 토픽(topic)에 쌓인 메시지를 리스너가 구독하여 처리합니다. Spring Kafka는 이를 손쉽게 구현할 수 있는 @KafkaListener 어노테이션을 제공합니다.

 

Kafka Listener의 동작 원리

  1. Producer가 메시지를 토픽에 전송합니다.
  2. Consumer는 특정 토픽을 구독하여 메시지를 읽습니다.
  3. Kafka Listener는 Consumer 역할을 하며, Kafka 브로커에서 데이터를 가져와 비즈니스 로직을 실행합니다.

 

Kafka Listener 기본 구성

Kafka Listener를 사용하려면 다음을 설정해야 합니다:

  1. Kafka 설정 (Producer와 Consumer Configuration)
  2. Kafka Listener 구현
  3. 토픽 생성 및 테스트

 

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 메시지 실패한 메시지 재처리 및 분석

 

 

카프카 리스너의 종류가 많다.

간단한 예제 샘플로는 단일 메시지 리스너를 사용해서만 구현해본 것 같아서 다른 리스너들도 조금씩 사용해보고 올려보고자 한다.

공부를 한다고 하는데 막상 누군가에게 설명하려고 하면 설명이 잘 안되더라.

결국 나혼자 알아서 업무를 하던 뭐를 하면 된다고 생각할 수 있겠지만 공부 했는데 이해 못시키니까 화가나더라 

좀 더 이해를 잘 시킬 수 있게 근본 부터 잘 학습해야겠다.