인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

임예준님의 프로필 이미지

작성한 질문수

카프카 완벽 가이드 - 코어편

Java 기반에서 Producer 구현하기 - 02

java.nio.BufferUnderflowException 에러 발생합니다..

작성

·

24

0

안녕하세요 해당 강의듣고 있는데

Java 기반에서 Producer 구현하기02를 보고

 

카프카 브로커에 메시지를 보냈습니다.

 

환경은 다음과 같습니다.

 

카프카 브로커: ec2 환경 (포트 열린건 확인했슴니당..)

카프카 컨플루언트 7.1.2

 

프로듀서: 로컬환경(맥)

카프카클라이언트 3.1.0

 

프로듀서(로컬)에서 메시지 send를 하면 java.nio.BufferUnderflowException해당 에러만 발생합니다.

[kafka-producer-network-thread | producer-1] ERROR org.apache.kafka.clients.producer.internals.Sender - [Producer clientId=producer-1] Uncaught error in kafka producer I/O thread:

java.lang.IllegalStateException: There are no in-flight requests for node 1

at org.apache.kafka.clients.InFlightRequests.requestQueue(InFlightRequests.java:62)

at org.apache.kafka.clients.InFlightRequests.completeNext(InFlightRequests.java:70)

at org.apache.kafka.clients.NetworkClient.handleCompletedReceives(NetworkClient.java:872)

at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:569)

at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:328)

at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:243)

at java.base/java.lang.Thread.run(Thread.java:833)

[kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node 1 disconnected.

 

해당 에러가 반복되고있고. 해결방법을 못찾겠네요 ㅠㅠ 트러블슈팅해봐도 감을 못잡겠어서 도움요청드려요..

 


카프카 브로커를 도커로 띄워놓고 logs로 보는데, 아무런 로그가 생성되지않고 있습니다!

 

제대로 send되는 것 같지 않아서 뭘 봐야되는지 모르겠네요..

 

답변 3

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

해결이 되었다니 다행이군요.

강의 실습 환경은 Private 네트웍 구성(동일 router로 구성된 네트웍)을 가정하고 만들어졌습니다.

EC2와 같은 Public 네트웍 서버에 있는 Broker에 public ip로 접속하려면 advertiese_listener 설정이 되어 있어야 합니다(생각해 보니, 이 부분을 강의에서 설명한다면서 빼먹었습니다).

 

감사합니다.

0

임예준님의 프로필 이미지
임예준
질문자

AI 인턴 보고 해결했습니다..

advertised.listeners 설정 문구를 보고 공인 IP로 바꿔보니 되네요

링크로 걸어준 스프링 연결시 오류 < 와 동일한 문제였습니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

임예준님, Java 기반에서 Kafka Producer 구현 중 발생한 java.nio.BufferUnderflowException 에러는 주로 클라이언트와 브로커 간의 네트워크 연결 문제나 브로커 설정 문제로 인해 발생할 수 있습니다. 아래의 몇 가지 체크포인트를 확인해 보시길 권장드립니다:

  1. 브로커 접속 정보 확인: 프로듀서 설정 파일에서 bootstrap.servers가 올바르게 설정되어 있는지 확인해주세요. EC2 환경에서 브로커를 실행 중이라면 해당 인스턴스의 공인 IP 주소와 포트가 올바르게 기재되어 있어야 합니다.

  2. 네트워크 설정 확인: EC2 인스턴스의 방화벽 설정이 올바르게 되어 있어야 합니다. 9092 포트가 외부 접근이 가능하도록 설정되어 있는지 확인해주세요.

  3. advertised.listeners 설정: EC2에서 Kafka를 실행할 때 server.properties 파일의 advertised.listeners 설정이 제대로 되어 있는지 확인합니다. 외부 클라이언트가 올바르게 접근할 수 있도록 인스턴스의 공인 IP를 사용해 설정해보세요. 예를 들면:

    advertised.listeners=PLAINTEXT://[YOUR_EC2_PUBLIC_IP]:9092
    
  4. Kafka 버전 호환성: Kafka 클라이언트(3.1.0)와 브로커(Kafka 2.x 이상 권장, 하지만 3.x 버전이 더 호환성이 좋음)의 버전 호환성을 확인해 보세요. 최신 버전에서 특정 기능이나 API가 변경되었을 수 있습니다.

  5. 브로커 로그 확인: 브로커에서 상세 로그가 기록되지 않는다면, 로그 레벨을 DEBUG로 설정하여 좀 더 세부적인 로그를 얻어보는 것도 도움이 될 수 있습니다. config/log4j.properties 파일을 수정하여 로그 레벨을 높여볼 수 있습니다.

위의 체크리스트를 기반으로 설정을 점검해 보시면 좋을 것 같습니다. 추가적으로 아래의 링크에서 비슷한 상황에 대한 토론을 참고하시면 도움이 될 수 있습니다.

자바 클라이언트 메세지 전송 테스트 실패

스프링 연결시 오류

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.