本地链接远程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
。然后就没有警告了。