인프라/Kafaka

카프카 리스너 - 단일 메시지 리스너와 배치 메시지 리스너의 차이

물에서육지로 2024. 12. 6. 17:05

카프카의 리스너를 공부하면서 단일 메세지 리스너와 배치 메시지 리스너의 대해 알아봤다.

그냥 이론만 보면 단건 , 뭉티기로 보낸다는 차이점이 있는데, 맨처음 예제 문제가 for문으로 한건씩 출력되게 하는 예제다 보니까

배치나, 단일이나 둘다 20줄씩 나오게 되고 이게 왜 달라..? 라고 벙찐게 생각난다.

 

크게는 팩토리의 설정 값을 변경하여 단일건인지 한번에 보낼건지를 설정할 수 있는 것 같은데 말이지..

 

그래서 두가지의 차이점을 일단 정리해봤다.

차이점이라고 할 것도 없는게 단건,,, 복수건.. 그냥 명확하게 달라서 비교할 것이 있나 싶긴한데 그냥 해보고 싶다.

내맘이다..

 

1.처리 단위

  • 단일 메시지 리스너:
    • 한 번에 하나의 메시지를 처리합니다.
    • Kafka에서 메시지를 가져올 때마다 리스너 메서드가 호출됩니다.
  • 배치 리스너:
    • 한 번에 여러 메시지(배치)를 묶어서 처리합니다.
    • Kafka에서 여러 메시지를 가져온 뒤, 배치 단위로 리스너 메서드가 호출됩니다.

2. 메시지 처리 방식

  • 단일 메시지 리스너:
    • 각 메시지에 대해 독립적으로 처리합니다.
    • 예를 들어, 한 메시지의 처리 시간이 오래 걸리면 다른 메시지 처리가 지연됩니다.
  • 배치 리스너:
    • 여러 메시지를 한 번에 처리하여 처리 효율성을 높일 수 있습니다.
    • 데이터베이스에 한꺼번에 저장하거나, 배치 기반 로직(예: 파일 쓰기, 집계 등)을 처리할 때 유리합니다.

3. Kafka 컨테이너 팩토리 설정

  • 단일 메시지 리스너:
    • 기본 ConcurrentKafkaListenerContainerFactory를 사용하며, setBatchListener(false)가 기본값입니다.
  • 배치 리스너:
    • setBatchListener(true)를 설정해야 합니다.

4. 오프셋 관리

  • 단일 메시지 리스너:
    • 각 메시지에 대해 오프셋이 개별적으로 관리됩니다.
    • 메시지 하나가 처리되면 오프셋이 커밋됩니다(자동 커밋인 경우).
  • 배치 리스너:
    • 배치 단위로 오프셋이 관리됩니다.
    • 배치에 포함된 모든 메시지가 처리된 뒤 오프셋이 커밋됩니다.

5. 성능 및 처리 효율성

  • 단일 메시지 리스너:
    • 낮은 지연 시간(Latency)이 필요할 때 적합.
    • 메시지가 도착하면 즉시 처리하므로, 실시간 처리 요구사항이 있는 경우 유리.
  • 배치 리스너:
    • 고성능 처리를 위해 적합.
    • 메시지를 묶어서 처리하므로, 네트워크 호출, 데이터베이스 작업 등의 비용을 줄일 수 있음.

6. 사용 사례

  • 단일 메시지 리스너:
    • 메시지가 도착하자마자 처리해야 하는 경우:
      • 실시간 알림 전송.
      • 메시지 하나하나가 독립적인 작업인 경우.
  • 배치 메시지 리스너:
    • 메시지를 한 번에 처리하는 것이 효율적인 경우:
      • 대량 데이터 저장 (예: 데이터베이스 배치 삽입).
      • 로그 데이터 처리.
      • 주기적인 메시지 집계 작업.