Kafka - 无法使用Java向远程服务器发送消息

时间:2015-01-26 07:58:01

标签: java linux apache-kafka

我正在尝试创建一个Kafka群集来向远程控制发送消息。我按照here所述配置了所有内容。 我在Linux red hat机器上运行它,它使用shell工作正常。在我的Windows机器上编写quick start教程中描述的java代码后,我收到了以下错误:

...
DEBUG kafka.client.ClientUtils$ - Successfully fetched metadata for 1 topic(s)     Set(example)
...
ERROR kafka.producer.SyncProducer - Producer connection to cldExampleKafka.domain:80 unsuccessful 
java.nio.channels.UnresolvedAddressException
    ...
    at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:44)
...
WARN kafka.producer.async.DefaultEventHandler - Failed to send producer request with correlation id 2 to broker 0 with data for patitions [ati,0]
java.nio.channels.UnresolvedAddressException
...
kafka.common.FailedToSendMessageException: Failed to send message after 3 tries.

我还尝试在不同的Linux机器上运行jar,但仍然收到同样的错误。

将地址更改为localhost并在安装了kafka的计算机中将jar代码作为jar运行。

我相信它的配置,但我找不到它。

4 个答案:

答案 0 :(得分:33)

在你的kafka server.properties中有一个评论配置

#advertised.host.name=<Some IP>

取消注释并添加运行kafka的Linux机器的IP。

advertised.host.name=<Kafka Running Machine IP>

从客户端连接到<Kafka Running Machine IP>这应该可以解决您的问题。

修改

您可以选择取消注释

#advertised.port=9092

此外,如果您正在侦听与默认端口不同的端口。

答案 1 :(得分:13)

使用

来自server.properties取消注释

listeners=PLAINTEXT://:9092

并且

advertised.listeners=PLAINTEXT://<HOST IP>:9092

<HOST IP>替换为实际IP。

答案 2 :(得分:1)

尝试从本地计算机连接到kafka远程群集。

VM有一个内部(9.0.0.1)和一个外部IP(192.1.1.1)。我只能ssh内部和外部不是外在的。我对conifg / server.properties进行了这些更改:

//设置为机器的IP(使用ifconfighostname -I查找)

listeners=PLAINTEXT://192.1.1.1:9092

//设置为消费者和生产者将连接的IP

advertised.listeners=PLAINTEXT://9.0.0.1:9092  

答案 3 :(得分:1)

config/server.properties
我把这个 listeners=PLAINTEXT://[server_ip]:9092

效果很好。

为了进行快速测试,请不要忘记在kafka-consumer命令行中使用[server_ip]。 示例:

/usr/local/kafka_2.11-2.0.0/kafka-console-consumer.sh --property print.timestamp=true --bootstrap-server [server_ip]:9092 --topic [you_topic]

希望对您有所帮助。
问候 阿里