【问题标题】:Kafka - Unable to send a message to a remote server using JavaKafka - 无法使用 Java 向远程服务器发送消息
【发布时间】:2015-03-24 15:31:34
【问题描述】:

我正在尝试创建一个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 的机器中将java 代码作为jar 运行。

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

【问题讨论】:

    标签: java linux apache-kafka


    【解决方案1】:

    在您的 kafka server.properties 中有一个注释配置

    #advertised.host.name=<Some IP>
    

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

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

    并从客户端连接到 &lt;Kafka Running Machine IP&gt; 这应该可以解决您的问题。

    编辑

    您可以选择取消注释

    #advertised.port=9092
    

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

    【讨论】:

    • 是否也需要更改zookeeper配置?因为我还是有问题
    • 我必须同时提到 host.name 和adverted.host.name 才能使其正常工作。
    • rmoff.net/2018/08/02/kafka-listeners-explained 更详细地解释了这一点
    • 我在 server.properties 中没有找到这个条目,但 Dhananjay 的答案对我有用。
    【解决方案2】:

    合作过

    来自server.properties 取消注释

    listeners=PLAINTEXT://:9092
    

    还有

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

    &lt;HOST IP&gt;替换为实际IP。

    【讨论】:

    • 你能分享你的实际配置吗
    • 尝试从 VM 连接到 kafka 远程集群。 VM 有 1 个内部(9.0.0.1 和外部 ip(192.1.1.1)我只能 ssh 到内部而不是外部,更改我的 conifg/server.properties //当你执行 ifconfig 或主机名时在机器中提供 ip -I 'code' listeners=PLAINTEXT://192.1.1.1:9092 //give the ip consumer and producer will connect 'code' Advertisementd.listeners=PLAINTEXT://9.0.0.1:9092
    【解决方案3】:

    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]
    

    我希望这可以帮助你。
    问候 阿里

    【讨论】:

      【解决方案4】:

      尝试从我的本地机器连接到 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  
      

      【讨论】:

        猜你喜欢
        • 2019-07-28
        • 1970-01-01
        • 1970-01-01
        • 2018-05-20
        • 1970-01-01
        • 2021-09-04
        • 1970-01-01
        • 2021-11-09
        • 2019-01-16
        相关资源
        最近更新 更多