[ERROR] kafka, springboot 연동 오류

KwangYong·2024년 3월 7일

TFT

목록 보기
3/5
post-thumbnail

에러 로그
[2024-03-06 17:19:16.146][vista-service][WINDOWS-TEIB042][reactive-kafka-StreamingEngine-1][WARN][NetworkClient.java-handleServerDisconnect:1065] - [Consumer clientId=consumer-StreamingEngine-1, groupId=StreamingEngine] Bootstrap broker 10.0.2.15:9092 (id: -1 rack: null) disconnected

가상환경에서 kafka 정상 작동 확인 후 springboot와 연동을 시도했는데 위의 에러 로그가 발생함.


✨ 시도 및 확인 사항

  • 카프카 로그 확인(서비스 실행 여부)
  • 가상환경 포트포워딩 설정
  • 스프링부트 application.yml에 kafka bootstrap server 값
    • localhost:9092
  • 가상환경 네트워크 설정
    • NAT

✨ 해결 방법

🎶 Kafka 브로커 설정:
Kafka의 server.properties 파일에서 listeners 및 advertised.listeners 설정 확인해야함.

listeners

  • 카프카 브로커가 내부적으로 바인딩하는 주소.

advertised.listeners

  • 카프카 클라이언트(프로듀서, 컨슈머)에게 노출할 주소. 설정하지 않을 경우 디폴트로 listners 설정이 적용된다.

호스트 OS의 springboot consumer와 연결해야하기 때문에 advertised.listeners를 수정해야했다.

🎶 수정 방법 :
Docker를 사용하여 Kafka를 실행하는 경우, advertised.listeners와 같은 Kafka 설정은 보통 Docker 실행 명령이나 Docker Compose 파일에서 환경 변수를 통해 설정됩니다. Docker 컨테이너 내부에서 Kafka의 server.properties(kafka.properties) 파일을 직접 수정하는 것은 권장되지 않습니다. 컨테이너가 재시작되면 이러한 변경사항이 사라질 수 있기 때문입니다.
Docker Compose를 사용하는 경우, docker-compose.yml 파일 내에서 Kafka 서비스의 환경 설정 부분에 이를 추가할 수 있습니다.

services:
  kafka:
    image: kafka-image-name
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

위의 [호스트의 IP 주소] 부분은 Kafka가 실행되고 있는 호스트 또는 가상 머신의 IP 주소로 대체해야 합니다. 이렇게 설정하면, Docker 컨테이너가 시작될 때 Kafka 구성이 해당 환경 변수에 따라 자동으로 설정됩니다. -> PLAINTEXT_HOST://localhost:9092로 변경함 (PLAINTEXT://kafka:29092 : 도커 컨테이너 간 통신 설정은 그대로 kafka 유지)

profile
바른 자세로 코딩합니다 👦🏻💻

0개의 댓글