[카프카] @KafkaListener

박상준·2024년 4월 10일
0

Kafka

목록 보기
2/4

개요

  • Spring FW 에서 제공하는 Kafka 통합 기능의 일부
  • 특정 카프카 토픽으로부터 메시지를 수신하기 위해 메서드 레벨에서 사용하는 어노테이션

역할

  1. 메시지 수신의 역할

    • @KafkaListener 로 해당 메서드가 Kafka 토픽으로부터 메시지를 수신할 것임을 명시한다.
  2. 토픽 구독

    • topics 설정으로 메서드가 어떤 토픽을 구독할건지 Kafka 토픽을 지정함
    • 하나 이상 구독이 가능하고 토픽이름은 String 배열로 제공
  3. 컨슈머 그룹의 지정

    • groupId 속성으로 메서드가 속할 Kafka 컨슈머 그룹을 지정함.
    • 컨슈머 그룹 지정으로
      • 여러 컨슈머 인스턴스들이 하나의 그룹을 형성하게 할 수 있음.
      • 하나의 토픽에 대하여 컨슈머들이 메시지를 공유하고 별도 처리를 진행한다.

    왜 consumer 그룹을 굳이 지정하는건가?

    1. 컨슈머는 확장될 수 있다.
      1. 다른 컨슈머에서 특정 토픽을 또 필요로 하는 경우 컨슈머가 확장될 수 있다는 것을 잊지 말아야함.
      2. 현재 프로젝트에서는 컨슈머가 하나라서, 의미가 없을 수 있지만, 향후 채팅관련된 토픽을 필요로 하는 컨슈머가 또 생기는 경우, 그룹을 지정해놓음으로서, 컨슈머간의 메시지 처리를 분산시킬 수 있음.
    2. 가용성 ( HA == High Availability )의 문제
      • 장애 대비
        • 컨슈머 그룹 내의 한 컨슈머가 실패하거나 네트워크 문제가 있는 경우, 해당 컨슈머가 처리하는 파티션들은 그룹 내의 다른 컨슈머에게 자동으로 재 할당

    추가 예시

    • 어플리케이션에서 a 컨슈머, b 컨슈머 클래스가 존재하고, 해당 컨슈머 클래스의 메서드에서 컨슈머 그룹을 동일하게 박상준 으로 설정한다면,
      • 컨슈머가 2개로 동작하며, 같은 컨슈머 그룹에 해당한다.
      • Kafka 는 2개의 컨슈머 인스턴스 사이에서 메시지를 분산하여 할당한다.
        • 특정 토픽의 파티션이 있는 경우, 파티션은 두 컨슈머 인스턴스 사이에서 분할되어 할당되는 것임.
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글