【问题标题】:Why I cannot connect to Kafka from outside?为什么我无法从外部连接到 Kafka?
【发布时间】:2015-01-27 06:31:18
【问题描述】:

我在 ec2 实例上运行 kafka。所以亚马逊 ec2 实例有两个 ip,一个是内部 ip,第二个是外部使用。

我从本地机器创建生产者,但它重定向到内部 ip 并给我连接不成功的错误。谁能帮我在 ec2 实例上配置 kafka,以便我可以从本地机器运行生产者。我尝试了很多组合,但没有奏效。

【问题讨论】:

  • 为可见性添加标签

标签: docker amazon-ec2 apache-kafka virtual-machine


【解决方案1】:

Kafka FAQ(针对新属性进行了更新)您可以阅读:

代理启动时,会在 ZK 中注册其 ip/port。您需要确保注册的 ip 与生产者配置中bootstrap.servers 中列出的内容一致。默认情况下,注册的 ip 由InetAddress.getLocalHost.getHostAddress() 给出。通常,这应该返回主机的真实 IP。但是,有时(例如,在 EC2 中),返回的 ip 是内部 IP,无法从外部连接。解决方案是通过设置server.properties中的advertised.listeners属性,显式设置要在ZK中注册的主机ip和端口。

【讨论】:

  • 只是想注意 server.properties 中提到的主机名属性被称为:host.name=<external-ip>
  • 我在极少数情况下:In another rare case where the binding host/port is different from the host/port for client connection, you can set advertised.host.name and advertised.port for client connection.。我该怎么做?
  • 这是“host.name”而不是“hostname”。
  • host.namedeprecated - 同样是 advertised.host.nameadvertised.port
  • @c0de 已弃用意味着它不会永远有效,但目前有效
【解决方案2】:

我解决了这个问题,将server.properties 中的advertised.host.nameproducer.properties 中的metadata.broker.list 设置为公共IP 地址,将host.name 设置为0.0.0.0

【讨论】:

  • @ sms_1190 ..嗨..我也面临同样的问题。我已经设置了在 ec2 linux 中运行的 kafka。我已经在安装在 windows 机器上的 eclipse 中编写了 java 代码。我能够在 eclipse 中创建事件,但我在 ec2 中运行的 kafka 生产者中看不到它们。如何在windows的maven中连接你的eclipse或kafka代码来连接ec2 linux。我已经修改了 kafka 服务器配置中的 Advertisementd.host.name 和 Advertisementd.port 以及生产者中的 metadata.broker.list 作为 pub ip:0000。
  • @user3858193:检查您在 ec2 中的安全组。您应该将 9092 端口打开到 0.0.0.0/0。
  • 1) 您能否在此处粘贴(这两行)您在 server.properties 和 producer.properties 中所做的实际更改。 2)您使用的是哪个kafka版本?提前致谢!
  • @sms_1190 你的 Windows 机器上是否有任何属性文件,或者每个配置文件都只在 EC2 上?再次感谢。
  • 这绝对解决了一个星期断头的问题。击掌!谢谢!
【解决方案3】:

我刚刚在 AWS 中完成了这项工作。首先让 Kafka 服务器使用 host.name 监听正确的接口/IP。对于您的情况,这将是内部 IP,而不是 localhost,因为您的意图是让外部 Kafka 客户端连接。任何本地客户端都需要使用相同的地址,而不是 localhost。

然后将 Advertisementd.host.name 设置为主机名,而不是 IP 地址。诀窍是让该主机名始终解析为内部和外部机器的正确 IP。我在内部使用 /etc/hosts,在外部使用 DNS。见我的full answer about Kafka and name resolution here

【讨论】:

    【解决方案4】:

    如何从外部网络中的消费者访问 EC2 上的 Kafka 服务器(版本 kafka_2.11-1.0.0)的最简单方法是更改​​属性文件

    kafka_2.11-1.0.0/config/server.properties
    

    并修改以下行

    listeners=PLAINTEXT://ec2-XXX-XXX-XXX-XXX.eu-central-1.compute.amazonaws.com:9092
    

    使用您的公共地址

    在 2.11-2.0.0 验证

    【讨论】:

    • 起到了魅力 :-) ... 感谢 P. Koncz。你也可以通过命令行覆盖它--override listeners=PLAINTEXT://ec2-XXX-XXX-XXX-XXX.eu-central-1.compute.amazonaws.com:9092
    • 您好,我已经在 Azure VM 上安装了 confluent-oss-5.0.0,我正在尝试通过公共 IP 访问以使用消息。端口打开。不走运,在更改了您的所有建议后它不起作用。出现以下错误:~/confluent-kafka/confluent-oss-5.0.0/bin$ kafka-console-producer --broker-list 13.71.115.20:9092 --topic pj_test123 >sdf [2019-03-25 18:23 :11,288] WARN [Producer clientId=console-producer] 获取相关 ID 为 1 的元数据时出错:{pj_test123=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
    【解决方案5】:

    对于 EC2,您应该编辑 /etc/hosts 文件以添加:

    XXX.XXX.XXX.XXX ip-YYY-YYY-YYY-YYY
    

    其中 XXX... 是您的外部 IP,而 ip-YYY-YYY-YYY-YYY 是 hostname 命令返回的字符串。您可以使用127.0.0.1 代替您的外部 IP 在服务器内部进行通信。

    host.namedeprecated - advertised.host.nameadvertised.port 也是如此

    【讨论】:

    【解决方案6】:

    以下是从 EC2 实例外部连接 Kafka 的步骤。

    1. 在 EC2 上打开 Kafka 服务器属性文件。

      /kafka_2.11-2.0.0/config/server.properties

    2. 将adverted.listeners的值设置为

      advertised.listeners=PLAINTEXT://ec2-xx-xxx-xxx-xx.compute-1.amazonaws.com:9092

      这应该是您的 EC2 实例的公共 DNS (IPv4)。

    3. 停止 Kafka 服务器。

    4. 启动 Kafka 服务器以查看上述配置更改的实际效果。

    5. 现在您可以从外部或本地连接到 EC2 实例的 Kafka。

      在 kafka_2.11-2.0.0 上进行了尝试和测试

    【讨论】:

      【解决方案7】:

      如果你想从局域网访问,请更改以下2个文件-

      1. config/server.properties:

        advertised.listeners=PLAINTEXT://server.ip.in.lan:9092
        
      2. config/producer.properties:

        bootstrap.servers=server.ip.in.lan:9092
        

      在我的例子中,server.ip.in.lan 的值是 192.168.15.150

      【讨论】:

        【解决方案8】:

        SSH 到您的 EC2 实例或托管 Kafka 的任何位置。

        sudo nano /etc/hosts

        添加:

        127.0.0.1 <your-host-name> localhost

        在我的情况下是:

        127.0.0.1 ec2-12-34-56-78.ap-southeast-1.compute.amazonaws.com

        保存并退出。

        【讨论】:

          猜你喜欢
          • 2018-01-04
          • 2022-01-06
          • 1970-01-01
          • 2020-06-02
          • 1970-01-01
          • 2016-06-03
          • 2021-10-28
          • 2012-08-04
          • 2017-07-30
          相关资源
          最近更新 更多