kafka生產者端dns配置與集羣端配置不一致問題:java.io.IOException: Can't resolve address: chdp11:9092

背景描述:
在虛擬機集羣上搭建了zk、kafka(version:0.11)集羣,在控制檯上測試生產消費時正常。而後在windows端使用java api向虛擬機消費端生產發送數據,發現程序正常運行起來過了大概十秒後結束( exit code 0),但在虛擬機開啓的消費者端並沒有收到數據。經過幾次檢查,確保通信沒問題,在java api端給未創建的topic發送數據時還可以發現在kafka集羣端主動創建了這個topic。但發送的數據在虛擬機的控制檯消費者端就是沒有打印(測試將數據打印到控制檯上的)。
相關代碼:

properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "chdp01:9092,chdp02:9092,chdp03:9092");

打開log4j debug發現以下錯誤:

2019-09-17 15:58:26,966 DEBUG [org.apache.kafka.clients.NetworkClient] - Initiating connection to node 1 at chdp11:9092.
2019-09-17 15:58:26,966 DEBUG [org.apache.kafka.clients.NetworkClient] - Error connecting to node 1 at chdp11:9092:
java.io.IOException: Can't resolve address: chdp11:9092
	at org.apache.kafka.common.network.Selector.connect(Selector.java:195)
	at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:762)
	at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:224)
	at org.apache.kafka.clients.producer.internals.Sender.sendProducerData(Sender.java:247)
	at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:223)
	at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:175)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.nio.channels.UnresolvedAddressException
	at sun.nio.ch.Net.checkAddress(Net.java:101)
	at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
	at org.apache.kafka.common.network.Selector.connect(Selector.java:192)
	... 6 more
2019-09-17 15:58:26,966 DEBUG [org.apache.kafka.clients.NetworkClient] - Initialize connection to node 3 for sending metadata request
2019-09-17 15:58:26,966 DEBUG [org.apache.kafka.clients.NetworkClient] - Initiating connection to node 3 at chdp13:9092.
2019-09-17 15:58:26,966 DEBUG [org.apache.kafka.clients.NetworkClient] - Error connecting to node 3 at chdp13:9092:
java.io.IOException: Can't resolve address: chdp13:9092
	at org.apache.kafka.common.network.Selector.connect(Selector.java:195)
	at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:762)
	at org.apache.kafka.clients.NetworkClient.access$600(NetworkClient.java:60)
	at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:906)
	at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:817)
	at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:430)
	at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:224)
	at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:175)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.nio.channels.UnresolvedAddressException
	at sun.nio.ch.Net.checkAddress(Net.java:101)
	at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
	at org.apache.kafka.common.network.Selector.connect(Selector.java:192)
	... 8 more

抽取主要幾行:

Error connecting to node 1 at chdp11:9092:
java.io.IOException: Can't resolve address: chdp11:9092
。。。
Caused by: java.nio.channels.UnresolvedAddressException

再來看一下windows與虛擬機上的相關dns配置

虛擬機dns(/etc/hosts)

192.168.11.11 chdp11
192.168.11.12 chdp12
192.168.11.13 chdp13

windows(C:\Windows\System32\drivers\etc\hosts)

192.168.11.11	chdp01
192.168.11.12	chdp02
192.168.11.13	chdp03

仔細看看這兩個dns配置的ip與域名。
因爲日常學習測試的原因在自己電腦上搭建了好幾套虛擬機,每套虛擬機的命名都不一樣但ip一樣(爲了避免每次去修改windows host文件這裏偷了個懶)。
很明顯了,在java api運行建立tcp連接時(三次握手)還會去查看運用kafka服務節點所在的dns,而這個dns在windows本地是沒有配置的,故而就出現了UnresolvedAddressException這個讓人看起來有點奇怪的異常(我在windows通信用的dns沒這個呀,這不是在虛擬機上配置的dns嗎。。。)

將windows上的dns映射域名修改爲與虛擬機一致問題解決

192.168.11.11	chdp11
192.168.11.12	chdp12
192.168.11.13	chdp13

想要具體瞭解其中原因或許可以從這位大佬的博客得到啓發:https://www.cnblogs.com/huxi2b/p/10112228.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章