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

20

我正在尝试创建一个Kafka集群来向远程控制发送消息。我已经按照这里描述的方式进行了配置。我正在运行这个集群在一台Linux red hat机器上,使用shell可以正常工作。但是,在我的Windows计算机上根据快速入门教程编写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的机器上运行Java代码作为一个jar包是可行的。

我相信这与配置有关,但我找不到它。

4个回答

39
在你的kafka server.properties文件中有一项被注释掉的配置。
#advertised.host.name=<Some IP>

取消注释并添加 Linux 机器的 IP 地址,该机器上正在运行 Kafka。

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

从客户端连接到 <Kafka 运行机器的 IP>,这样应该就可以解决你的问题了。

编辑

可选地,您可以取消注释

#advertised.port=9092

如果您正在监听与默认端口不同的端口。


它是否还需要更改Zookeeper配置?因为我仍然遇到问题。 - Panagiotis Drakatos
我必须同时提及 host.name 和 advertised.host.name 才能使其正常工作。 - Rahul
1
https://rmoff.net/2018/08/02/kafka-listeners-explained/ 详细解释了这个问题。 - Robin Moffatt
我在server.properties中没有找到这个条目,但是Dhananjay的答案对我有用。 - Alex8752

21

server.properties 合作,取消注释

listeners=PLAINTEXT://:9092

并且

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

<HOST IP> 替换为实际的IP地址。


1
请问您能否分享您的实际配置? - Kumar Sambhav
尝试从VM连接到kafka远程集群。 VM有1个内部IP(9.0.0.1)和外部IP(192.1.1.1),我只能通过内部IP进行ssh连接,而不能通过外部IP进行连接。更改了我的conifg/server.properties //在执行ifconfig或hostname -I时,在机器中给出IP 'code' listeners=PLAINTEXT://192.1.1.1:9092 //提供消费者和生产者将连接的IP 'code' advertised.listeners=PLAINTEXT://9.0.0.1:9092 - CodeUrLife

4

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]

希望这能对你有所帮助。
祝好, Ali


1

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

虚拟机有一个内部IP地址(9.0.0.1)和一个外部IP地址(192.1.1.1)。我只能通过内部IP地址进行ssh连接,而不能通过外部IP地址。我对我的config/server.properties进行了以下更改:

//将其设置为该机器的IP地址(使用ifconfighostname -I查找)

listeners=PLAINTEXT://192.1.1.1:9092

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

advertised.listeners=PLAINTEXT://9.0.0.1:9092  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接