2016-11-15 75 views
0

我有一個KafkaProducer,當我嘗試發送消息時突然開始拋出TimeoutExceptions。即使我已將max.block.ms屬性設置爲60000ms,並將測試塊設置爲60s,但我總是收到的錯誤消息的時間少於200毫秒。它實際上顯示60000ms的唯一時間是如果我在調試模式下運行它並手動步驟通過waitOnMetadata方法。Apache KafkaProducer在發送消息時拋出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配置並讓客戶端連接到它們。 – 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)消息的後面。在停止並重新啓動代理後,我可以再次發送和使用消息。