本地鏈接遠程Kafka異常
遠程機器fp-bd13
搭建最新版Kafka (自帶zookeeper),按照文檔默認配置啓動。遠程新建producer和costumer一切正常。
本地spark鏈接:
JavaPairReceiverInputDStream<String, String> kafkaStream =KafkaUtils
.createStream(jssc,"fp-bd13:2181", "0", topicMap);
測試出現:
[ ERROR ] fetching topic metadata for topics [Set(test)] from broker
[ArrayBuffer(id:0,host:localhost,port:9092)] failed
kafka.common.KafkaException:
Fetching topic metadata with correlation id 0 for topics [Set(test)]
from broker [BrokerEndPoint(0,localhost,9092)] failed
(kafka.client.ClientUtils$)
看到這個日誌覺得有點奇怪,爲什麼會有localhost,我們配置的明明是fp-bd13
的zookeeper,但是9092的端口是kafka所監聽的。從而想到可能是鏈接kafka的配置存在問題。 kafka_2.11-1.1.0/config/server.properties
的listeners
屬性默認是 localhost:9092
,由於遠程鏈接localhost並不是本機,所以這裏需要制定下我們IP和端口:listeners=PLAINTEXT://fp-bd13:9092
。然後重啓 kafka 再運用spark應用就能成功鏈接了。
成功後我們在遠程創建一個生產者,用來傳遞消息給spark應用:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
執行命令後卻不停的警告:
[2018-04-17 10:08:48,158] WARN [Producer clientId=console-producer] Connection to node -1 could not be established.
Broker may not be available. (org.apache.kafka.clients.NetworkClient)
意思是沒有客戶端鏈接這個生產者,發消息本地應用也收不到。之前遠程測試又是沒問題的,從而想到又是網絡問題。這裏我們要修改--broker-list
爲fp-bd13:9092
。然後就沒有警告了。