본문 바로가기

카테고리 없음

[Kafka] 카프카 - 스프링 부트 프로젝트

 

 

1. 의존성 추가

implementation 'org.springframework.kafka:spring-kafka'

 

2. application.properties 설정

# Kafka Bootstrap Servers
spring.kafka.bootstrap-servers=localhost:9092

# Kafka Producer Configuration
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

# Kafka Consumer Configuration
spring.kafka.consumer.group-id=testgroup
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.max-poll-records=100
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

 

1) 카프카 서버 정보 설정

# Kafka Bootstrap Servers
spring.kafka.bootstrap-servers=localhost:9092

Spring Kafka가 kafka 클러스터에 연결하기 위한 브로커 서버의 주소를 지정하는 속성

 

2) 프로듀서(Producer) 설정

# Kafka Producer Configuration
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
  • Kafka 프로듀서에서 전송하는 메시지의 key, value를 직렬화(serialize)할 때 사용할 직렬화 클래스 지정
  • 여기에서는 org.apache.kafka.common.serialization.StringSerializer 클래스를 사용하여 직렬화
  • org.apache.kafka.common.serialization.StringSerializer 클래스는 문자열 형식으로 직렬화 되도록 함 
  • JSON 형식의 데이터를 보내려면 org.springframework.kafka.support.serializer.JsonSerializer 클래스 사용

 

3) 컨슈머(Consumer) 설정

spring.kafka.consumer.group-id=testgroup
  • spring.kafka.consumer.group-id 속성은 컨슈머 그룹을 식별하는 고유한 그룹 ID를 설정함
  • 동일한 그룹 ID를 가지는 여러 컨슈머가 하나의 토픽에서 메시지를 처리하게 되고 이를 통해 메시지 처리를 분산시킬 수 있음

 

spring.kafka.consumer.auto-offset-reset=earliest
  • spring.kafka.consumer.auto-offset-reset 속성은 컨슈머가 Kafka 토픽의 파티션에 대한 오프셋이 없거나 현재 오프셋이 더 시아 존재하지 않을 경우 어떻게 동작할 지 설정
  • 옵션 earliest는 가장 오래된 메시지를 읽기 시작함, 컨슈머가 초기 오프셋을 가지지 않거나 토픽에 새로운 오프셋이 없는 경우에는 토픽의 가장 이전부터 메시지를 읽음
  • 옵션 latest는 가장 최근 메시지부터 읽기 시작함
  • 옵션 none은 오프셋 정보가 없으면 예외를 발생 시킴

 

spring.kafka.consumer.enable-auto-commit=true
  • 컨슈머가 자동으로 오프셋을 커밋할 지 여부 설정
  • 옵션 true: 컨슈머가 자동으로 오프셋을 커밋
  • 옵션 false: 컨슈머가 자동으로 오프셋을 커밋하지 않음, 수동으로 커밋해야 함

 

spring.kafka.consumer.max-poll-records=100
  • 한 번의 poll() 호출로 반환되는 최대 레코드 수 설정
  • 이 값은 한 번에 처리할 수 있는 레코드의 최대 양을 제한하는 데 사용됨

 

spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
  • Kafka 컨슈머가 토픽에서 수신하는 메시지의 key, value를 역직렬화(deserialize)할 때 사용할 직렬화 클래스 지정
  • 여기에서는 org.apache.kafka.common.serialization.StringDeserializer 클래스를 사용하여 역직렬화
  • org.apache.kafka.common.serialization.StringDeserializer 클래스는 문자열 형식으로 역직렬화 되도록 함 
  • JSON 형식의 데이터를 보내려면 org.springframework.kafka.support.serializer.JsonDeserializer 클래스 사용

 

3. 

직접설정

토픽, 프로듀서, 컨슈머 컨피그를 직접 만들고

 

컴포넌트 만드는데 이건 서비스단에서 만들면 될 듯