2016-11-15 4 views
0

메시지를 보낼 때 갑자기 TimeoutExceptions을 던지기 시작한 KafkaProducer이 있습니다. max.block.ms 속성을 60000ms로 설정하고 테스트 블록을 60s로 설정 했더라도 오류 메시지는 항상 200ms 미만으로 나타납니다. 실제로 디버그 모드에서 실행하고 waitOnMetadata 메서드를 수동으로 실행하면 60000ms 만 표시됩니다.아파치 카프카 프로듀서가 메시지를 보낼 때 TimeoutException을 던지고 있습니다.

오류 예 :
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 101 ms.

갑자기 메타 데이터를 업데이트 할 수 없습니다 이유

사람이 알고 있나요? 내가 잘못한 제작자의 구현이 아니라는 사실을 알고 있습니다. 다른 서버에서 테스트를 실행하면 작동하지 않았을뿐 아니라 변경하지 않았을뿐만 아니라 모두 통과했습니다. 이것에 대한 서버 측의 이유는 무엇일까요? 브로커를 다시 시작해야합니까? 그리고 왜 그냥 실행 시키면 타임 아웃 메시지에 잘못된 시간이 표시됩니까?

생산자 설정 :

val props = new Properties() 
props.put("bootstrap.servers", getBootstrapServersFor(datacenter.mesosLocal)) 
props.put("batch.size","0") 
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer") 
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer") 
props.put("max.block.ms","60000") 
new KafkaProducer[String,String](props) 
+0

IaaS 환경에서 브로커를 호스팅하는 머신입니까? 그렇다면 advertised.host.name config를 설정하고 클라이언트에 연결하는 것이 좋습니다. – amethystic

+0

이전에 값을 설정하지 않은 상태에서 작동하는 다른 서버에서 값을 설정하지 않은 경우 왜 지금 설정하면 도움이됩니까? – annedroiid

+1

kafka-console-producer로 실행 해 보셨습니까? –

답변

1

는 내가 메시지를 보낼 수 있고 내가 다시 WARN Error while fetching metadata with correlation id 0 : {metadata-1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient) 메시지를 많이 가지고 있는지 확인하기 위해 콘솔 프로듀서를 사용하려고했습니다. 브로커를 중지했다가 다시 시작한 후 메시지를 다시 보내고 사용할 수있었습니다.