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(使用ifconfig
或hostname -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]
希望对您有所帮助。
问候
阿里
我正在尝试创建一个 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(使用ifconfig
或hostname -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]
希望对您有所帮助。
问候
阿里