작성
·
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 인턴입니다.
임예준님, Java 기반에서 Kafka Producer 구현 중 발생한 java.nio.BufferUnderflowException
에러는 주로 클라이언트와 브로커 간의 네트워크 연결 문제나 브로커 설정 문제로 인해 발생할 수 있습니다. 아래의 몇 가지 체크포인트를 확인해 보시길 권장드립니다:
브로커 접속 정보 확인: 프로듀서 설정 파일에서 bootstrap.servers
가 올바르게 설정되어 있는지 확인해주세요. EC2 환경에서 브로커를 실행 중이라면 해당 인스턴스의 공인 IP 주소와 포트가 올바르게 기재되어 있어야 합니다.
네트워크 설정 확인: EC2 인스턴스의 방화벽 설정이 올바르게 되어 있어야 합니다. 9092 포트가 외부 접근이 가능하도록 설정되어 있는지 확인해주세요.
advertised.listeners 설정: EC2에서 Kafka를 실행할 때 server.properties
파일의 advertised.listeners
설정이 제대로 되어 있는지 확인합니다. 외부 클라이언트가 올바르게 접근할 수 있도록 인스턴스의 공인 IP를 사용해 설정해보세요. 예를 들면:
advertised.listeners=PLAINTEXT://[YOUR_EC2_PUBLIC_IP]:9092
Kafka 버전 호환성: Kafka 클라이언트(3.1.0)와 브로커(Kafka 2.x 이상 권장, 하지만 3.x 버전이 더 호환성이 좋음)의 버전 호환성을 확인해 보세요. 최신 버전에서 특정 기능이나 API가 변경되었을 수 있습니다.
브로커 로그 확인: 브로커에서 상세 로그가 기록되지 않는다면, 로그 레벨을 DEBUG로 설정하여 좀 더 세부적인 로그를 얻어보는 것도 도움이 될 수 있습니다. config/log4j.properties
파일을 수정하여 로그 레벨을 높여볼 수 있습니다.
위의 체크리스트를 기반으로 설정을 점검해 보시면 좋을 것 같습니다. 추가적으로 아래의 링크에서 비슷한 상황에 대한 토론을 참고하시면 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.