디벨롭
로그인
디벨롭
로그인
[카프카] @KafkaListener
박상준
·
2024년 4월 10일
팔로우
0
kafka
0
Kafka
목록 보기
2/4
개요
Spring FW 에서 제공하는 Kafka 통합 기능의 일부
특정 카프카 토픽으로부터 메시지를 수신하기 위해 메서드 레벨에서 사용하는 어노테이션
역할
메시지 수신의 역할
@KafkaListener
로 해당 메서드가 Kafka 토픽으로부터 메시지를 수신할 것임을 명시한다.
토픽 구독
topics
설정으로 메서드가 어떤 토픽을 구독할건지 Kafka 토픽을 지정함
하나 이상 구독이 가능하고 토픽이름은 String 배열로 제공
컨슈머 그룹의 지정
groupId
속성으로 메서드가 속할 Kafka 컨슈머 그룹을 지정함.
컨슈머 그룹 지정으로
여러 컨슈머 인스턴스들이 하나의 그룹을 형성하게 할 수 있음.
하나의 토픽에 대하여 컨슈머들이 메시지를 공유하고 별도 처리를 진행한다.
왜 consumer 그룹을 굳이 지정하는건가?
컨슈머는 확장될 수 있다.
다른 컨슈머에서 특정 토픽을 또 필요로 하는 경우 컨슈머가 확장될 수 있다는 것을 잊지 말아야함.
현재 프로젝트에서는 컨슈머가 하나라서, 의미가 없을 수 있지만, 향후 채팅관련된 토픽을 필요로 하는 컨슈머가 또 생기는 경우, 그룹을 지정해놓음으로서, 컨슈머간의 메시지 처리를 분산시킬 수 있음.
가용성 ( HA == High Availability )의 문제
장애 대비
컨슈머 그룹 내의 한 컨슈머가 실패하거나 네트워크 문제가 있는 경우, 해당 컨슈머가 처리하는 파티션들은 그룹 내의 다른 컨슈머에게 자동으로 재 할당
추가 예시
어플리케이션에서 a 컨슈머, b 컨슈머 클래스가 존재하고, 해당 컨슈머 클래스의 메서드에서 컨슈머 그룹을 동일하게
박상준
으로 설정한다면,
컨슈머가 2개로 동작하며, 같은 컨슈머 그룹에 해당한다.
Kafka 는 2개의 컨슈머 인스턴스 사이에서 메시지를 분산하여 할당한다.
특정 토픽의 파티션이 있는 경우, 파티션은 두 컨슈머 인스턴스 사이에서 분할되어 할당되는 것임.
박상준
이전 블로그 : https://oth3410.tistory.com/
팔로우
이전 포스트
[카프카]카프카 브로커·클러스터·주키퍼
다음 포스트
카프카 멱등성 프로듀서에 대해..
0개의 댓글
댓글 작성