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

Kafka - Unable to send a message to a remote server using Java

我正在尝试创建一个 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.

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

将地址更改为 localhost 并 运行 将 java 代码作为 jar 安装在安装了 kafka 的机器上。

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

在你的 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

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

曾与

合作

来自 server.properties 取消注释

listeners=PLAINTEXT://:9092

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

用实际 IP 替换 <HOST IP>

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

VM 有一个内部 IP (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  

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]

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