# application.yml 예시
spring:
  kafka:
    bootstrap-servers: localhost:9092 # broker 주소
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.IntegerSerializer
      # producer 성능 튜닝
      acks: all
      retries: 1
      batch-size: 16384
      linger-ms: 5
    consumer:
      # consumer 기본 설정
      group-id: compute-group
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.IntegerDeserializer
    listener:
      poll-timeout: 3s
      # 병렬 스레드 수
      concurrency: 4
      missing-topics-fatal: false
설정 경로 항목 설명
spring.kafka.bootstrap-servers localhost:9092 Kafka 브로커의 호스트:포트. Producer와 Consumer가 처음 연결할 주소를 지정
spring.kafka.producer.key-serializer StringSerializer 메시지 Key를 직렬화할 클래스. 여기선 Stringbyte[]로 변환
spring.kafka.producer.value-serializer IntegerSerializer 메시지 Value를 직렬화할 클래스. Integerbyte[]로 변환
spring.kafka.producer.acks all 프로듀서가 “성공 응답”으로 간주할 조건: – all은 ISR 내 모든 복제본에 쓰여야 성공 (가장 안전, 응답시간 길어짐)
spring.kafka.producer.retries 1 전송 실패 시 재시도 횟수. 네트워크·브로커 오류가 났을 때 최대 1회 재시도
spring.kafka.producer.batch-size 16384 한 배치에 모을 메시지 최대 크기(Bytes). 이 크기만큼 모이거나 linger.ms 시간이 지나면 한 번에 전송
spring.kafka.producer.linger-ms 5 메시지를 배치로 묶기 전 대기 시간(ms). 짧게 설정할수록 지연이 줄지만 배치 효율은 떨어짐
spring.kafka.consumer.group-id compute-group Consumer가 속할 그룹 ID. 같은 그룹 내 컨슈머들끼리 파티션을 분담 처리
spring.kafka.consumer.auto-offset-reset earliest 소비할 오프셋이 없을 때 어떻게 시작할지:– earliest: 가장 처음부터 읽기– latest: 새 메시지부터 읽기
spring.kafka.consumer.key-deserializer StringDeserializer 브로커에서 받은 Key 바이트를 String으로 역직렬화할 클래스
spring.kafka.consumer.value-deserializer IntegerDeserializer 브로커에서 받은 Value 바이트를 Integer로 역직렬화할 클래스
spring.kafka.listener.poll-timeout 3s @KafkaListener가 메시지를 가져올 때 poll() 호출의 최대 대기 시간(초).이 시간만큼 새 레코드 대기 시도
spring.kafka.listener.concurrency 4 @KafkaListener당 생성할 스레드(컨슈머) 수. 병렬 소비 인스턴스를 늘려 처리량을 높임
spring.kafka.listener.missing-topics-fatal false 설정된 토픽이 브로커에 없을 때 애플리케이션 기동 실패 여부:– false: 토픽이 없어도 계속 실행– true: 에러 발생